2

私はMVVMを初めて使用し、行き詰まりました...

メインウィンドウにリストボックスがあります。ListBoxには、DataTemplatesによって表示されるWhatEverViewModelタイプのアイテムが含まれています。ユーザーはこれらのアイテムを操作でき、WhatEverViewModelには操作中に変更される可能性のあるいくつかのDependencyPropertiesがあります。

私が持っている質問は、現在選択されているWhatEverViewModelのDependencyPropertiesの変更に(MainWindowViewModelで)エレガントに反応するにはどうすればよいですか。私は個人的にWhatEverViewModelにいくつかのイベントを実装し、ListBoxのSelectedItemが変更されたときに、現在選択されているWhatEverViewModelのイベントにアタッチします。しかし、MVVMには、これを解決するためのよりエレガントな方法があるかもしれないと思います...

ありがとうございました。

4

3 に答える 3

2

CurrentWhatEverのプロパティを作成しMainWindowViewModel、そのプロパティをバインドしますListbox.SelectedItem。このようにMainWindowViewModelして、選択したWhatEverがいつ変更されるかを認識し、関心のあるイベントに登録/登録解除できます。

于 2012-04-26T09:44:50.643 に答える
2

ビューモデル間の通信は、いくつかの方法で行うことができます。

  • MVVMLightのようなメッセンジャー/メディエーター
  • PRISMのようなイベント
  • または、単にharcoupleを使用して、mainviewmodelのWhatEverViewModelからのイベントをサブスクライブします。

ところで、なぜあなたはビューモデルでDependencyPropertiesを使用するのですか?INotifyPropertyChangedを使用した単純なプロパティがその方法です。

もう一つ。SelectedViewmodelの変更に対応したいのはなぜですか(または、選択したビューモデルで達成したいことを改善したいのです)。ビューに情報を表示したいだけの場合は、SelectedViewmodelをそれにバインドするだけです。そのように質問を指定する必要があります。

編集

WhatEverViewModelには、(データテンプレート内の)リストボックスにもバインドされているリストがあり、WhatEverViewModelで選択したものに応じて、MainViewModelにある種の「Configurator」を表示したいと思います。–jensPfister11時間前

SelectedWhatEverViewmodel.SelectedListEntryPropertyをコンフィギュレータービューに単純にバインドしてみませんか?コードを投稿できますか?

于 2012-04-26T09:54:40.593 に答える
0

INotifyPropertyChanged各ViewModelにインターフェースを実装する必要があります。次に、プロパティの変更の1つがイベントを呼び出すと、PropertyChangedビューはプロパティが変更されたという通知を受け取ります(バインディングが正しい場合)。プロパティがリストまたはコレクションである場合は、リストがに基づいていることを確認してINotifyCollectionChangedください。

選択したWhatEverViewModelのプロパティをMainWindowViewModelに追加し、それをリストボックスにバインドします。次に、MainWindowViewModelで、選択したWhatEverViewModelのプロパティの変更にフックできます。

詳細なガイダンスについては、以下をお読みください。

于 2012-04-26T09:43:40.887 に答える