依赖项属性的工作原理
本文关键字:工作 属性 依赖 | 更新日期: 2023-09-27 18:33:49
试图理解这段代码是如何工作的:
创建依赖属性,
public int YearPublished
{
get { return (int)GetValue(YearPublishedProperty); }
set { SetValue(YearPublishedProperty, value); }
}
public static readonly DependencyProperty YearPublishedProperty =
DependencyProperty.Register(
"YearPublished",
typeof(int),
typeof(SimpleControl),
new PropertyMetadata(2000));
然后在表单中使用它,
<xmlns:local="clr-namespace:WpfApplication1"
Title="MainWindow" Height="350" Width="525">
<StackPanel>
<local:SimpleControl x:Name="_simple" />
<TextBlock Text="{Binding YearPublished, ElementName=_simple}"
FontSize="30"
TextAlignment="Center" />
<Button Content="Change Value"
FontSize="20"
Click="Button_Click_1"/>
</StackPanel>
然后对于Button_Click_1
做,
private void Button_Click_1(object sender, RoutedEventArgs e)
{
_simple.YearPublished++;
}
它有效。每次按下按钮时,都必须从属性元数据更改数字 - 从 2000++,但我也在文本框中的表单上看到了它。
问:为什么?
如果我没有在主窗体中放置任何用于更新 TextBlock 的代码,它是自动更新还是有一些隐藏机制?或者也许我不完全了解它是如何工作的。或者,如果它的属性有功能,可以更新表单上的数字。
当你创建一个DependencyProperty
时,
DependencyProperty.Register(
"YearPublished",
typeof(int),
typeof(SimpleControl),
new PropertyMetadata(2000));
基于 YearPublished 属性,您基本上是在 DependencyProperty 框架中注册它,每次读取或写入该属性时,它都会通知所有订阅者已发生的事件。您可以通过指定属性的名称来注册它,即 "YearPublished"
、属性类型、属性所在的控件的类型,在本例中为 2000
的初始值。
通过将其绑定到TextBlock
,
<TextBlock Text="{Binding YearPublished, ElementName=_simple}" />
您让文本块知道属性何时更改,以便它可以自行更新。当 YearPublished
属性更改时,它会将此更改通知文本块,而文本块又检索更新的值并使用它更新其 Text
属性。
不过,这是一个非常高级的视图,但足以正确使用它。要进一步了解内部结构,请查看此 MSDN 帖子。
如果绑定具有正确的设置,并且数据提供了正确的通知,则当数据更改其值时,绑定到数据的元素会自动反映更改。
查看此概述