2016-05-30 30 views
1

シナリオ:私はグリッドを2つ持っています。 1は親、2は子です。各行では、私はコンバータを呼び出しています。親レコードを選択すると、後続の子レコードが子グリッドに表示されます。子行のマウスオーバー時に、converterを呼び出します。コールコンバーターターゲットプロパティ値が変更されていない場合でも

問題:私が直面している問題は、複数の親レコードに同じ子がある可能性があるということです。私はコンバータが強制的に別の親のために示されているときに強制的にコールしたいが、子が同じであれば、ターゲットプロパティが変更されていないのでコンバーターを呼び出さなかった。

例:グリッド1には親レコードAとBがあります。レコードAには2つの子があります。

レコードA:1)Comman子供

レコードB:1)共通子供2)レコードB行Aの選択の子供

、その後のonmouseover共通子コンバータを呼び出します。レコードBを選択すると、レコードBの子のみのコンバーターが呼び出され、共通の子のコンバーターは呼び出されません。値は変更されません。

PS:子はChildsObservableCollectionに配置され、選択にはfiltercollectionがchildObservableCollectionから設定されます。 filtercollectionは子グリッドにバインドされています。

は、私はそれがターゲットプロパティの値が変更されたときに、それが唯一と呼ばれ、コンバータのデフォルトの振る舞いだけど、ここで私は強制的に行結合/変更のコンバータを呼び出したいです。何か案が? ありがとうございました。

答えて

0

バインディングターゲットを強制的に更新できます。私はTextBlocktbTestでいくつかの例を書きました。

<TextBlock Name="tbTest" Text="{Binding TestInt, Converter={StaticResource intToStr}}" /> 

コードはこのようになります。 UpdateTarget()は、Conveter.Convertコールを引き起こします。

var bindingExpression = tbTest.GetBindingExpression(TextBlock.TextProperty); 
bindingExpression.UpdateTarget(); 
関連する問題