设为首页收藏本站
授权版本:2024_07
开启左侧

[C#] WPF自定义控件绑定模型属性无法使用的解决办法

[复制链接]
Princess 发表于 2023-3-29 16:46:04 | 显示全部楼层 |阅读模式
背景:
       最近重写了一个控件,并且在重写类内部声明了一个依赖属性,通过this.DataContext = this; 正常绑定也没有问题。
然后再其他的界面上通过引入方法导入了控件,类似<ctrl:CheckButtonEx IsChkBtnChecked = "{bind IsDataRight}" />然后运行提示原来的控件类不存在IsDataRight属性。
当然肯定也无法正常使用了。
IsDataRight这个属性是在当前界面中对应的模型下面实现了INotifyPropertyChanged接口下使用的,其他绑定的都是正常的。


解决过程:
出现这个问题,一直找不到答案,后来才知道,绑定的下上文出现了两次,一个是控件内部绑定了上线文为自身。第二个就是控件使用的地方,绑定了界面模型使用的属性。
现在的问题就是这个绑定的属性是找不到位置,想想也是,才开始我们绑定了上下文为控件自身的类对象了。
很明显是冲突了。

既然不能直接绑定,那么我们使用另外一种方式,不直接绑定上下文,然后对象初始化的时候再自行去找属性的位置应该就可以了。
第一步,首先移除控件内部的绑定上下文,就是这句 this.DataContext = this;
第二步,修改控件里面Binding的方式,原来是直接绑定的,现在已经移除第一步的设置,自然就无效了。
  1. {Binding IsChkBtnChecked ,RelativeSource={RelativeSource AncestorType={x:Type UserControl}}, Mode=TwoWay}
复制代码

这样就可以实现多重绑定,让控件自己的依赖属性单独动态去确定相对的源对象,自然到内部就是当前控件对象了。
最后一步,在界面上使用控件地方改成双向更新,不然你的修改数据无法触发源(控件对象)的更新
  1. <ctrl:CheckButtonEx IsChkBtnChecked = "{bind IsDataRighg, Mode = TwoWayt}" />
复制代码
特此记录,以便后来者学习。
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表