WPF 自定义控件中自定义依赖属性 Binding 失效的问题

本文探讨了在WPF自定义控件中遇到的自定义依赖属性MyWidth与ViewModel双向Binding失效的问题。问题源于使用OneWayToSource模式导致原有绑定被破坏。解决方案包括更改Binding模式为TwoWay或者在注册依赖属性时使用FrameworkPropertyMetadata并设置BindsTwoWayByDefault为true。
摘要由CSDN通过智能技术生成

原先控件的依赖属性写法如下

  public class MyControl : Control
    {
        public double MyWidth
        {
            get => (double)GetValue(MyWidthProperty);
            set => SetValue(MyWidthProperty, value);
        }

        public static readonly DependencyProperty MyWidthProperty =
            DependencyProperty.Register("MyWidth", typeof(double), typeof(Control), 
                new PropertyMetadata(0d));
    }

把属性 MyWidth Binding 到 ViewModel 的一个变量之中,一开始发现没什么问题,但是后来在 MyControl 这个对 MyWidth 进行修改之后发现 Binding 就失效了,ViewModel 不再能对 MyControl 中的 MyWidth 进行修改。

百度后发现原因是

https://ask.csdn.net/questions/677894
因为你的OneWayToSource 破坏了 t1的绑定 wpf绑定里面一旦建立了绑定 如果绑定源被第三方改变 这个绑定就会被破坏掉 你可以试试把你的t3 Mode也改为OneWay 不要用OneWayToSource 因为 OneWayToSource 其实改变了绑定源 t1和t2的绑定就被破坏了

而 new PropertyMetadata(0d) 所注册的依赖属性默认的 BindingMo

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
获取WPF自定义控件依赖属性的数据流程如下: 1. 定义依赖属性:在自定义控件的代码,定义一个依赖属性并注册该属性。例如: ``` public static readonly DependencyProperty MyPropertyProperty = DependencyProperty.Register( "MyProperty", typeof(string), typeof(MyControl), new PropertyMetadata("Default Value")); public string MyProperty { get { return (string)GetValue(MyPropertyProperty); } set { SetValue(MyPropertyProperty, value); } } ``` 2. 绑定依赖属性:在XAML,将自定义控件依赖属性绑定到其他控件或数据源。例如: ``` <local:MyControl MyProperty="{Binding MyData}" /> ``` 3. 获取依赖属性的值:当自定义控件被渲染时,WPF框架会自动调用依赖属性的get方法,从绑定的数据源获取属性的值。如果没有绑定任何数据源,则使用属性的默认值。例如: ``` string myPropertyValue = myControlInstance.MyProperty; ``` 4. 监听依赖属性的变化:如果需要在属性值发生变化时执行一些自定义逻辑,可以在自定义控件注册属性值变化的回调函数。例如: ``` public static readonly DependencyProperty MyPropertyProperty = DependencyProperty.Register( "MyProperty", typeof(string), typeof(MyControl), new PropertyMetadata("Default Value", OnMyPropertyChanged)); private static void OnMyPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { // Execute custom logic when MyProperty value changes } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值