写点什么

WPF 学习——依赖项属性(1)

  • 2021 年 11 月 11 日
  • 本文字数:1473 字

    阅读完需:约 5 分钟

在研究的同时,我也进行了反思,最后感悟是——还是那句老话:理论的东西,哪怕你把它背下来了,你永远也不懂。


对我们来说,学编程为了什么?不就是为了应用吗?也就是说用于实战,既然这样,其实我们不必把理论的东西钻得太死,不然,钻牛角尖容易走火入魔。


依赖项属性的重点在于“依赖”二字,既然是依赖了,也就是说:依赖项属性的值的改变过程一定与其它对相关,不 A 依赖 B 就 B 依赖 A,或者相互依赖。


说白了,所谓依赖,主要应用在以下地方:


1、双向绑定。有了这个,依赖项属性不用写额的代码,也不用实现什么接口,它本身就俱备双向绑定的特性,比如,我把员工对象的姓名绑定到摇文本框,一旦绑定,只要文本框中的值发生改变,依赖项属性员工姓名也会跟着变化,反之亦然;


2、触发器。这个东西在 WPF 中很重要,比如,一个按钮背景是红色,我想让它在鼠标停留在它上面是背景变成绿色,而鼠标一旦移开,按钮恢复红色。


如果在传统的 Windows 编程中,你一定会想办法弄一些事件,或者委托来处理,还要写一堆代码。告诉你,有了依赖项属性,你将一行代码都不用写,所有的处理均由 WPF 属性系统自动处理。而触发器只是临时改变属性的值,当触完成时,属性值自动被“还原”。


3、附加属性。附加属性也是依赖项属性,它可以把 A 类型的的某些属性推迟到运行时根据 B 类型的具体情况来进行设置,而且可以同时被多个类型对象同时维护同一个属性值,但每个实例的属性值是独立的。


4、A 属性改变时,也同时改变其它属性的值,如 TogleButton 按下的同时,弹出下拉框。


为了进行比较,我们先来说说传统面向对象编程中对类属性的定义,请看下面一个简单的类,它只有一个公共属性。


<span style="font-size:24px;">public class Student


{


public string Name { set; get; }


}</span>


这时候,我们布局一下 WPF 主窗口,如下所示 XAML:


<span style="font-size:24px;"><W


【一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义】
浏览器打开:qq.cn.hn/FTf 免费领取
复制代码


indow x:Class="Dp_Project.MainWindow"


xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"


xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"


Title="MainWindow" Height="180" Width="300" Loaded="Window_Loaded_1">


<Grid>


<Grid.ColumnDefinitions>


<ColumnDefinition Width="auto"/>


<ColumnDefinition Width="*"/>


</Grid.ColumnDefinitions>


<Grid.RowDefinitions>


<RowDefinition Height="auto"/>


<RowDefinition Height="auto"/>


<RowDefinition Height="auto"/>


</Grid.RowDefinitions>


<TextBlock Grid.Column="0" Grid.Row="0" Text="姓名:"/>


<TextBox x:Name="txtName" Grid.Column="1" Grid.Row="0" Margin="0,5,20,5"/>


<TextBlock Grid.Column="0" Grid.Row="1" Text="改变值:"/>


<TextBox x:Name="txtCh" Grid.Column="1" Grid.Row="1" Margin="0,5,20,5"/>


<Button x:Name="btn" Grid.Row="2" Grid.ColumnSpan="2" Margin="70,5,70,5" Click="btn_Click">显示属性值</Button>


</Grid>


</Window>


</span>


在窗口的加载完成事件中,我们作两个绑定:


(1)把 Student 的实例的 Name 属性与 textBox 的 text 属性绑定;


(2)同时与第二个文本框也绑定。


运行程序,在第一个文本框中输入内容,再点一下第二个文本框,或点一下按钮,虽然第二个文本框也会随之改变,但并不是同步改变,而是当焦点离开第一个文本框后才发生改变,这就不属于同步了。


完整代码如下:


<span style="font-size:24px;"> Student stu = new Student { Name="小模"};


private void Window_Loaded_1(object sender, RoutedEventArgs e)


{

评论

发布
暂无评论
WPF学习——依赖项属性(1)