Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 依赖属性是如何工作的?_C#_.net_Wpf_Dependency Properties - Fatal编程技术网

C# 依赖属性是如何工作的?

C# 依赖属性是如何工作的?,c#,.net,wpf,dependency-properties,C#,.net,Wpf,Dependency Properties,试图了解此代码的工作原理: 创建依赖项属性 public int YearPublished { get { return (int)GetValue(YearPublishedProperty); } set { SetValue(YearPublishedProperty, value); } } public static readonly DependencyProperty YearPublishedProperty = DependencyProperty.

试图了解此代码的工作原理:

创建依赖项属性

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>
它起作用了。每次按下按钮时,数字都必须从PropertyMetadata(从2000++)更改,但我在文本框的表单上也看到了它

问题:为什么


如果我没有在主窗体中添加任何更新TextBlock的代码,它是自动更新的还是有一些隐藏的机制?或者我不完全理解它是如何工作的。或者,如果其属性包含更新表单上数字的功能。

如果绑定具有正确的设置,并且数据提供了正确的通知,则当数据更改其值时,绑定到数据的元素会自动反映更改


检查

如果绑定具有正确的设置并且数据提供了正确的通知,则当数据更改其值时,绑定到数据的元素会自动反映更改


创建
依赖属性时,请选中

DependencyProperty.Register(
    "YearPublished", 
    typeof(int), 
    typeof(SimpleControl), 
    new PropertyMetadata(2000));
基于YearPublished属性,您基本上是在DependencyProperty框架中注册它,每次读取或写入该属性时,它都会通知所有订阅者已发生的事件。您可以通过指定属性名称(即
“YearPublished”
、属性类型、属性所在控件的类型以及在本例中的初始值
2000
)来注册它

通过将其绑定到
文本块

<TextBlock Text="{Binding YearPublished, ElementName=_simple}" />

您正在让文本块知道属性何时更改,以便它可以自行更新。当
YearPublished
属性更改时,它会将此更改通知文本块,然后文本块会检索更新的值并用它更新其
text
属性


虽然这是一个非常高级的视图,但足以正确使用它。要进一步了解内部结构,请查看此项。

当您创建
DependencyProperty时

DependencyProperty.Register(
    "YearPublished", 
    typeof(int), 
    typeof(SimpleControl), 
    new PropertyMetadata(2000));
基于YearPublished属性,您基本上是在DependencyProperty框架中注册它,每次读取或写入该属性时,它都会通知所有订阅者已发生的事件。您可以通过指定属性名称(即
“YearPublished”
、属性类型、属性所在控件的类型以及在本例中的初始值
2000
)来注册它

通过将其绑定到
文本块

<TextBlock Text="{Binding YearPublished, ElementName=_simple}" />

您正在让文本块知道属性何时更改,以便它可以自行更新。当
YearPublished
属性更改时,它会将此更改通知文本块,然后文本块会检索更新的值并用它更新其
text
属性


虽然这是一个非常高级的视图,但足以正确使用它。为了进一步理解内部结构,请看一看。

因此,如果我使用
Text=“{Binding YearPublished,ElementName=\u simple}”
Binding automatically add reflect effect on changes?噢,在建立绑定和数据更改时发现
,绑定到数据的UI元素可以自动反映更改。
因此,如果我使用
Text=“{Binding YearPublished,ElementName=_simple}”
绑定自动添加对更改的反映效果?哦,当绑定建立且数据更改时,发现
,绑定到数据的UI元素可以自动反映更改。
at