Sam*_*Sam 2 c# data-binding uwp windows-10-universal
我有一个非常奇怪的问题。如果我设置了绑定并将绑定更改为另一个属性,它将不起作用。
看这个简单的例子
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 });
Run Code Online (Sandbox Code Playgroud)
当FinalTotal改变时, 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 });
Run Code Online (Sandbox Code Playgroud)
现在它起作用了!!!!更改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 });
Run Code Online (Sandbox Code Playgroud)
我的问题是: 1. 如何更换UWP中的绑定?2. 如何移除 UWP 中现有的绑定(即等效于BindingOperations.ClearBinding() 的功能)?
谢谢你的帮助...
正如它在FrameworkElement.SetBinding 方法中声明的那样:
注意 调用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 });
Run Code Online (Sandbox Code Playgroud)
在此之后,您的代码应该能够工作。欲了解更多信息,请参见备注的FrameworkElement.SetBinding也BindingOperations.SetBinding。
| 归档时间: |
|
| 查看次数: |
1197 次 |
| 最近记录: |