2009-04-20 17 views
1

IValueConverterからViewModelを参照する標準的な方法がありますか、それともMVVMパターンを壊していますか?基本的には、ViewModelの他のプロパティに基づいてUIのバインドされたデータを変換したいと思います。これは、コントロールへの参照がConvert/ConvertBackメソッドに渡されないため、IValueConverterのWindow/Pageをどのように参照するのと同じ質問であると思います。IValueConverterからViewModelへの参照を取得する

答えて

2

ViewModelの他のプロパティを連結または結合するViewModelに新しいプロパティを追加することをお勧めします。これにより、IValueConverterの必要はありません。

MVVMを使用している場合は、IValueConvertersthisのディスカッションを参照してください。

+1

+1 MVVMを実践する場合、コンバーターを大幅に廃止することができます。その結果、よりクリーンで理解しやすいコードが得られます。 –

0

珍しいシナリオでは、コンバーターのViewModelから複数のプロパティを使用する必要がある場合は、入力としてビューモデル全体を渡すだけです。これは確かにMVVMパターンを破る限り変換を起動し、ウィンドウ/ページ/ビューへの参照を取得することと

<Textbox Text="{Binding, Converter={StaticResource WholeObjectConverter}"/> 

は良いアイデアではありません。アイデアは、あなたのビューとデータが別々のエンティティであり、設計によってお互いを知るべきではないということです。

実際にハックする場合は、賢明になり、必要な参照(ViewModelまたはView)をバインディングのConverterParameter部分として渡すことができます。

関連する問題