2016-12-23 13 views
0

私は非常に奇妙な問題があります。バインディングを設定して別のプロパティへのバインドを変更しても、動作しません。この単純な例FinalTotalが変更されたUWP:データバインディングの置き換え

lblTotal.SetBinding(TextBlock.TextProperty, new Binding() { Path = new PropertyPath("Subtotal"), Source = Order, Mode = BindingMode.OneWay }); 
lblTotal.SetBinding(TextBlock.TextProperty, new Binding() { Path = new PropertyPath("FinalTotal"), Source = Order, Mode = BindingMode.OneWay }); 

ルックは、lblTotalテキストはは変更されません。

今、最初の行をコメントアウトしました。

//lblTotal.SetBinding(TextBlock.TextProperty, new Binding() { Path = new PropertyPath("Subtotal"), Source = Order, Mode = BindingMode.OneWay }); 
lblTotal.SetBinding(TextBlock.TextProperty, new Binding() { Path = new PropertyPath("FinalTotal"), Source = Order, Mode = BindingMode.OneWay }); 

今すぐお試しください!!!! FinalTotalを変更すると、lblTotalテキストが変更されます。どんな考え?

また、BindingOperations.ClearBinding()は、UWPでは使用できません。だから私はそれを空の束縛で置き換えようとしましたが、それはまだ動作しません。

lblTotal.SetBinding(TextBlock.TextProperty, new Binding() { Path = new PropertyPath("Subtotal"), Source = Order, Mode = BindingMode.OneWay }); 

//remove binding - not sure if this is correct way to remove binding because 
//BindingOperations.ClearBinding() isn't available in UWP! 
BindingOperations.SetBinding(lblTotal, TextBlock.TextProperty, new Binding()); 

lblTotal.SetBinding(TextBlock.TextProperty, new Binding() { Path = new PropertyPath("FinalTotal"), Source = Order, Mode = BindingMode.OneWay }); 

私の質問は以下のとおりです。UWPで結合を置換する方法 1.? 2. UWPの既存のバインディングを削除するにはどうすればいいですか?つまり、BindingOperations.ClearBinding()と同等の機能を削除するにはどうすればいいですか?任意の助け

おかげで...

+0

BindingModeをTwoWayに変更することはできますか? – Sasha

+0

こんにちはSasha、私はそれを試みましたが、それでも動作していません:( – Sam

+0

"Subtotal"のバインディングを設定する際にエラーが発生するでしょう出力ウィンドウにバインディングエラーが表示されますか? – Sasha

答えて

3

それはFrameworkElement.SetBinding methodで宣言されたよう:

SetBindingメソッドを呼び出して、新しいBindingオブジェクトに渡すことは必ずしも削除されません既存のバインディング。代わりにDependencyObject.ClearValueメソッドを呼び出してからSetBindingに電話する必要があります。

だから、次のようにコードを変更することができます。

lblTotal.SetBinding(TextBlock.TextProperty, new Binding() { Path = new PropertyPath("Subtotal"), Source = Order, Mode = BindingMode.OneWay }); 
lblTotal.ClearValue(TextBlock.TextProperty); 
lblTotal.SetBinding(TextBlock.TextProperty, new Binding() { Path = new PropertyPath("FinalTotal"), Source = Order, Mode = BindingMode.OneWay }); 

この後、あなたのコードは動作することができるはずです。詳細は備考FrameworkElement.SetBindingBindingOperations.SetBindingを参照してください。

+0

Jayさん、このコードはテストしていませんが、私が仕事に戻ったときにそれを試して、問題があれば報告してください! – Sam

+0

ジェイ、それは働いた! ks! – Sam