2012-01-04 4 views
0

私はユーザーコントロールを含むビューを持っています。 私は、ユーザーコントロールに何らかのアクション(データの更新)をさせるためにビューモデルを作りたいと思っています。ViewModel trigerで操作するためにビューに含まれているコントロールを作成するにはどうすればいいですか?

私のVM内のいくつかのブールプロパティをペースし、それをユーザーコントロールにバインドしてトリガーすることができますが、プロパティの少し乱用していると思います。

私は何か不足していると感じ、解決策を見つけることができません。私はコメントを感謝します。

私のソリューション: 私はUserControlでコレクションのイベントを登録することで問題を解決します。なぜなら、そのコントロールにCollectionViewSourceを介してコレクションのビューをバインドしているからです。 私の元の問題は、データソースをフィルタリングしたときに更新されるように、UserControl内のチャートコントロールを作成する方法でした。 VMからのフィルタリング操作後、イベントが発生し、UserContolのコード内のいずれかで更新されるようにチャートを作成します

+2

VMに正しくバインドしている場合は、通常、その基本となるようにUserControlをrefresh()する必要はありません。INotifyProperyChangedインターフェイス – SvenG

+0

を介してビューに伝播する必要があります。しかし、ユーザーコントロールにはメンテナンスが必要なものが多く含まれています – Yaniv

+0

"その他のもの"は何ですか? – blindmeis

答えて

1

MVVMタグソリューションはかなり簡単であると指摘しているので、 ViewModelでデータ項目を公開することで、INotifyPropertyChanged/INotifyCollectionChangedにViewModelを指定すると、データ更新が自動的にViewに送出されます。あなたが正しくあなたのユーザーコントロールをバインドされてきた場合は、ビューモデルからメッセージを送信したい場合INotifiyPropertyChangedは、言っ

をトリガしたときにWPFは自動的にUIを更新しますので、

+0

私はMVVMを使用していますが、ユーザーコントロールの内部では、VMからトリガーされる必要がある操作を行う必要があります。 – Yaniv

1

して、手動でデータを更新する必要はありませんビューには、通常、ある種のメッセージングシステムを使用してビューとViewModelを分離した状態に保ちます。私が使用した2つのメッセージは、MVVM Light's MessengerまたはMicrosoft Prism's EventAggregator

です。いずれのシステムでも、ViewModelはメッセージをブロードキャストでき、また、ビューはこれらのメッセージを受信して​​必要に応じて処理できるようになります。

+0

メッセージをいただきありがとうございます。 – Yaniv

関連する問題