WPF学习(4)-依赖属性上

  还是先来一个例子

<RadioButton  Name="RB1" Content="RadioButton" HorizontalAlignment="Left" Margin="102,88,0,0" VerticalAlignment="Top"/>
        <ComboBox IsEnabled="{Binding ElementName=RB1, Path=IsChecked}" HorizontalAlignment="Left" Margin="115,168,0,0" VerticalAlignment="Top" Width="120">
            <ComboBoxItem>张三</ComboBoxItem>
            <ComboBoxItem>李四</ComboBoxItem>
            <ComboBoxItem>王五</ComboBoxItem>
        </ComboBox>

       当RadioButton选中之后,combox的isenable设置为true,如果是原来的做法,肯定是RadioButton ischecked事件,当触发这个事件后,查看ischecked的状态,然后对应修改combox的isenable,当然也没有问题,但是这样就有一个问题,明明这个只是界面的逻辑却放在了后台用C#去实现,代码量会变多,而且逻辑不清。

        在wpf中,直接一句IsEnabled="{Binding ElementName=RB1, Path=IsChecked}"就可以搞定了,非常简洁明了。

        依赖属性,定义可以简单理解为,属性值本身没有值,而是依赖于别的属性,比如我们例子中的combox的isenable并没有给定值,而是依赖于RadioButton,这样看来,应该是很好理解,也非常简单了。

        比如上面这个图,有一个基类,叫定位对象,定位对象有两个派生类,警察和犯人,警察有两个派生类,法警和狱警,狱警又有两个派生类,一个监区狱警,一个办公楼狱警。

       定位对象有一个属性叫做工作单位,那么下面继承的警察,法警,狱警,监区狱警,办公楼狱警,都会继承这个办公单位属性,但是我们的定位系统是部署在局域网的,而且监狱又不可能上外网,那么这些人的工作单位都是一样的,可是我们每new一个对象出来,都会开辟空间来保存这个工作单位,这个是大大的浪费,于是依赖属性就应运而生了,依赖属性的诞生最初就是为了解决继承膨胀的问题。

     在上面这个例子,我们就可以使用依赖属性,定位对象的工作单位就设计成依赖属性,那么他的子类,孙子类,重孙子类,只要你不去给这个属性赋值,那么他们都依赖于这个基类的属性值,比如我们给定base类的默认值是郑州市监狱,那么后面new出来的所有警察对象,工作单位都是郑州市监狱,而且是不开辟空间去保存的。

        具体如何实现,在依赖属性中里面会详细介绍。

猜你喜欢

转载自blog.csdn.net/whjhb/article/details/84333400