WPF 绑定自定义控件的依赖属性到ViewModel

首先关于数据绑定的基础知识,参见官方文档:https://docs.microsoft.com/en-us/dotnet/desktop-wpf/data/data-binding-overview

从上面文档中可以看出,数据绑定是在DependencyProperty与ViewModel的Property之间一种联系。

WPF 绑定自定义控件的依赖属性到ViewModel

 

所以我们需要在自定义控件里实现DependencyProperty, 在ViewModel上实现Property,即拥有get、set方法的字段。还有INotifyPropertyChanged : https://docs.microsoft.com/en-us/dotnet/api/system.componentmodel.inotifypropertychanged?redirectedfrom=MSDN&view=netframework-4.8

在使用framework里的控件时,我们一般不会指定BindingMode: https://docs.microsoft.com/en-us/dotnet/api/system.windows.data.bindingmode?view=netframework-4.8#System_Windows_Data_BindingMode_TwoWay

因为大部分控件都是默认TwoWay。

注意,这个默认,其实就是在framework里显示指定了TwoWay。

所以当我们的自定义控件的DependencyProperty没有被更新的时候,考虑要设置BindingMode

                BindsTwoWayByDefault = true,
                DefaultUpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged

完整的代码,以Progress属性为例:

        public int Progress
        {
            get { return (int)GetValue(ProgressProperty); }
            set { SetValue(ProgressProperty, value); }
        }

        public static readonly DependencyProperty ProgressProperty =
            DependencyProperty.Register("Progress", typeof(int), typeof(MyUserControl), new FrameworkPropertyMetadata(0, OnProgressChangedCallback, OnProgressCoerceValueCallback) {
                BindsTwoWayByDefault = true,
                DefaultUpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged
            });

 

参考资料:

https://www.dominikschmidt.net/2010/12/net-c-binding-custom-dependencyproperty-to-viewmodel-property/

 

WPF 绑定自定义控件的依赖属性到ViewModel

上一篇:使用 Kustomize 帮你管理 kubernetes 应用(一):什么是 Kustomize ?


下一篇:CentOS RPM安装 MySQL-5.6.17