WPF中的依赖项属性

WPF中的依赖项属性

 

WPF的工程是由XAML文件和C#文件沟通构成的。C#在工程中主要用于处理逻辑,而XAML则用来在软件界面上显示。很多情况下我们都希望后台的属性改变之后能够在前台的界面上也呈现出来这种变化。常见的这种通知变化的方式有两种,分别是:

1. 使用PropertyChangedEventHandler在属性改变的时候通知用户界面。

2. 使用依赖项属性。

 

例子:

XAML文件:

复制代码
<TextBox   Text="{Binding Path=StudentAge}"

                       Grid.Row="3"

                       Grid.Column="2"

                       VerticalAlignment="Top" Margin="0,5,0,0" />
复制代码

 

说明:在这个文件中放置了一个TextBox,该元素的Text属性与数据模型中的属性StudentAge

绑定。

C#文件:

 

复制代码
       int _studentAge;

        public int StudentAge

        {

            get

            {

                return _studentAge;

            }

            set

            {

                _studentAge = value;

            }

        }
复制代码

 

说明:在C#文件中虽然定义了StudentAge属性,并完成了与XAML的绑定,但是现在属性值改变的时候UI界面上不会发生改变。这就需要前面提到的两种处理方式去实现后台数据与前台UI之间的同步变化。

 

方式一:使用PropertyChangedEventHandler在属性改变的时候通知用户界面。

复制代码
        #region INotifyPropertyChanged Members

 

        public event PropertyChangedEventHandler PropertyChanged;

 

        #endregion

 

        void OnPropertyChanged(string propertyName)

        {

            if (PropertyChanged != null)

                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));

        }

        int _studentAge;

        public int StudentAge

        {

            get

            {

                return _studentAge;

            }

            set

            {

                _studentAge = value;

                OnPropertyChanged("StudentAge");      //这句代码很重要,用其通知前台界面//去改变

            }

        }
复制代码

 

说明:首先申明一个PropertyChangedEventHandler事件,并实现OnPropertyChanged函数。用于触发事件,并通知用户界面改变。

 

小结:通过以上的方法就能够实现后台数据改变并在前台界面上显示的效果。这是一种方法。还有一种方法就是下面将要说明的依赖项属性。

 

方法二:依赖项属性

复制代码
        public static readonly DependencyProperty StudentAgeProperty = DependencyProperty.Register("StudentAge",

                                                                                                   typeof (int),

                                                                                                   typeof (StudentData));

 

        public int StudentAge

        {

            get { return (int)GetValue(StudentAgeProperty); }

            set { SetValue(StudentAgeProperty, value); }

        }
复制代码

 

说明:依赖项属性使用的时候只需要先创建一个依赖项的实例。如上面的StudentAgeProperty。创建的时候调用Register注册。注册函数的参数包含了属性名。然后按照上面的方式声明属性就可以了。

 

总结:在自定义类中一般都比较少使用依赖项属性,使用的时候用前面的第一种方式解决就可以了(使用依赖项属性的时候会出现错误,因为GetValue和SetValue函数都是来自于Control类的,自定义类继承于这个类才能使用这两个方法)。但是对于要扩展一个控件的属性的时候依赖项属性就比较有用了!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值