私は、MVVMの開発パターンに従って、かなり単純なアプリケーションをWPFで作成しようとしていますが、単純なことをするのがいかに難しいかを狂ってしまいました。私はすでにFormsでこのアプリケーションを作成し、正常に実行していましたが、私の上司はWPFのインターフェースを技術のデモとして書き直すように要求しました。私は可能な限り多くのベストプラクティスに従うことを試み、アプリとコードをできるだけ教育的にすることに決めました。私の現在のジレンマは、リストボックスを使用して、選択が変更されるたびにコードを実行しています。私はちょうどイベントでコードビハインドを使用して、ビューモデルのメソッドを呼び出す準備ができました。私にとっては、ロジックが実行されていないので、これは本質的にMVVMであるようです。助けてください/洞察力に感謝します。MVVM WPFのリストボックスにコマンドをバインドする簡単な方法はありますか?
答えて
あなたは単に選択に...リストボックスのSelectedItemプロパティをバインディングは、ビューモデルのセッターが呼び出され、あなたが欲しい、これまで何を行うことができます変更することを行うことができます...ここで
は意志のサンプルです助けあなた
XAML
<Grid Canvas.Left="0" Canvas.Bottom="0" Height="300" Width="300" Background="Bisque">
<ListBox ItemsSource="{Binding Employes}" SelectedItem="{Binding SelectedEmploye}"/>
</Grid>
ビューモデル
public class ViewModel : ViewModelBase
{
private List<Employee> _employes;
public List<Employee> Employes
{
get { return _employes; }
set { _employees = value; OnPropertyChanged("Employes"); }
}
private Employee _selectedEmploye;
public Employee SelectedEmploye
{
get { return _selectedEmploye; }
set
{
_selectedEmployee = value;
OnPropertyChanged("SelectedEmploye");
}
}
}
ビューモデルベース
public class ViewModelBase : INotifyPropertyChanged
{
protected virtual void OnPropertyChanged(string propertyName)
{
if (this.PropertyChanged != null)
{
this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
public event PropertyChangedEventHandler PropertyChanged;
}
従業員クラス
public class Employee : ViewModelBase
{
private string _name;
public string Name
{
get { return _name; }
set { _name = value; }
}
}
アウトEventToCommand
行動Galasoft MVVM LightあなたのViewModelに
私はそれをある程度深く確認する必要があります。私は本当にプロジェクトに別のフレームワークを追加することを避けることを本当に望んでいた。 – Paul
にあなたはプロパティ "のSelectedItem" を作成することができます。リストボックスをプロパティにバインドする場合は、SelectedItemプロパティをバインドします。
- POCO clrプロパティ(INotifyPropertyChanged)の場合は、プロパティセッターからコードをトリガーできます。
- DependencyPropertyの場合、PropertyChangedCallbackを追加してそこからコードをトリガーする必要があります。
コードビハインドの使用を心配しないでください。コードビハインドは、あまりにも多くのロジックがビューに配置されるのを避けるためのガイドラインであり、ハードで迅速なルールではありません。この場合(他の人が示唆しているように)、SelectedItemプロパティをviewmodelのいくつかのプロパティにバインドできます。非データ関連のイベントでは、通常のようにイベントを処理し、実行ロジックをビューモデルに委任することをお勧めします。
私の意見では、デザインパターンは、通常、物事を悪化させるほど厳密には適用されないので、いつも大雑把に判断して判断する必要があります。
私はここであなたに同意する傾向がありますが、幸運にも私は私がしなければならないと思ったすべてのフープを飛び越えずにこれを行う簡単な方法があるように見えます。 – Paul
@ pauleck1 - あなたが不必要にフープを突き抜けているような気がしたら、一歩踏み込んで正しいアプローチを取っているかどうか再考するときが来ます。そこにはすべてのMVVMフレームワークがあるので、絶えず物事を過剰にエンジニアリングし、コードを保守しにくくするのは簡単です(これは多少目的を破ります)。 MVVMが悪いと言っているわけではありませんが、WPFを使って作業するときは、確かに私の武器です。 – Moonshield
あなたのVMで選択した項目を取得するためにListBox.SelectedItemに特異的に結合することができます。
- 1. WPFの親行に簡単にバインドする方法はありますか?
- 2. Swingインターフェイスをデータソースにバインドする簡単な方法はありますか?
- 3. WPFリストボックス:データをバインドする方法は?
- 4. WPF StatusBarテキストを設定する簡単な方法はありませんか?
- 5. 簡単にListBoxをWPFでリフレッシュする方法はありますか?
- 6. richtextbox内のWPFハイパーリンクをコマンドにバインドする方法は?
- 7. あるxamlオブジェクトのプロパティを別のものにバインドする簡単な方法はありますか?
- 8. Readlineに代わる簡単な方法はありますか?
- 9. CObListを簡単にソートする方法はありますか?
- 10. QProgressBarを簡単にカスタマイズする方法はありますか?
- 11. フレックスプリローダーを隠す簡単な方法はありますか?
- 12. "elseif marathon"より簡単な方法はありますか?
- 13. WebSphereに簡単にデプロイする方法はありますか?
- 14. WPFでコマンドをバインドする方法
- 15. リベースによってトピックブランチをマージする簡単なコマンドはありますか?
- 16. BJ concurencyを扱う簡単な方法はありますか?
- 17. NSArrayを後方に反復する簡単な方法はありますか?
- 18. Markdownを簡単なHTML文書に変換する簡単な方法はありますか?
- 19. ScrollViewerを「バウンシー」にする簡単な方法はありますか?
- 20. System.Data.DataTableをlinqエンティティに変換する簡単な方法はありますか?
- 21. jqueryコードをjavascriptに変換する簡単な方法はありますか?
- 22. listmodelにジェネリックスをロードする簡単な方法はありますか?
- 23. バルーンチップにチェックボックスを追加する簡単な方法はありますか?
- 24. WPFのリストボックス用のバインド
- 25. データWPFリストボックスをバインドしますか?
- 26. C#からWebカメラにアクセスする簡単な方法はありますか?
- 27. ViewModelリスト(WPF MVVM)にViewコントロールを正しくバインドする方法
- 28. Javaオブジェクトのサイズを取得する簡単な方法はありますか?
- 29. ノードの子を照会する簡単な方法はありますか?
- 30. ActiveMQのキュー長を取得する簡単な方法はありますか?
これは本当に私を正しい方向に向けるのに役立ちます。ありがとうございました。 – Paul
これは実際には良いことです。しかし、 'Loaded'イベントのように回避策を講じることが不運な場合は、' EventToCommand'フレームワークが必要です。 –