问题描述
在下面这段代码中,我们给控件的某个属性设置了单向绑定,然后在代码的某处给这个属性显式地赋了值,结果会导致我们在这之前设置的绑定永久失效。- //外部给Text属性设置绑定
- <TextBox Text="{Binding Name, Mode=OneWay}" />
- //控件内部代码
- private void ClearButton_Click(object sender, RoutedEventArgs e)
- {
- base.Text = string.Empty;
- }
复制代码 解决方案1
最简单的解决方式是将绑定改为双向的,那么给任何一方显式地赋值都不会使绑定失效- [/code][size=4]解决方案2[/size]
- 如果不想更改绑定方式,那么可以在赋值前保存之前的绑定,在赋值后设置回去。这种方式验证过,也是可行的,不过感觉代码不太优雅,当出现这种情况时,或许可以思考从设计层面去规避掉。
- [code]private void ClearButton_Click(object sender, RoutedEventArgs e)
- {
- var bindingExpression = this.GetBindingExpression(TextProperty);
- Binding binding = bindingExpression?.ParentBinding;
- base.Text = string.Empty;
- if (binding != null)
- {
- this.SetBinding(TextBox.TextProperty, binding);
- }
- }
复制代码 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |