给依赖属性设置单向绑定时,直接给依赖属性赋值,导致单向绑定永久失效 ...

锦通  金牌会员 | 2022-11-9 01:33:12 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 896|帖子 896|积分 2688

问题描述

在下面这段代码中,我们给控件的某个属性设置了单向绑定,然后在代码的某处给这个属性显式地赋了值,结果会导致我们在这之前设置的绑定永久失效。
  1. //外部给Text属性设置绑定
  2. <TextBox Text="{Binding Name, Mode=OneWay}" />
  3. //控件内部代码
  4. private void ClearButton_Click(object sender, RoutedEventArgs e)
  5. {
  6.     base.Text = string.Empty;
  7. }
复制代码
解决方案1

最简单的解决方式是将绑定改为双向的,那么给任何一方显式地赋值都不会使绑定失效
  1. [/code][size=4]解决方案2[/size]
  2. 如果不想更改绑定方式,那么可以在赋值前保存之前的绑定,在赋值后设置回去。这种方式验证过,也是可行的,不过感觉代码不太优雅,当出现这种情况时,或许可以思考从设计层面去规避掉。
  3. [code]private void ClearButton_Click(object sender, RoutedEventArgs e)
  4. {
  5.     var bindingExpression = this.GetBindingExpression(TextProperty);
  6.     Binding binding = bindingExpression?.ParentBinding;
  7.     base.Text = string.Empty;
  8.     if (binding != null)
  9.     {
  10.         this.SetBinding(TextBox.TextProperty, binding);
  11.     }
  12. }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

锦通

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表