gpt4 book ai didi

C# 依赖属性 - 是否检查 CLR Wrapper 中的值

转载 作者:太空宇宙 更新时间:2023-11-03 14:24:08 25 4
gpt4 key购买 nike

在用 C# 编写自定义依赖属性时,一个相当常见的包装器类似于:

    public string Surname
{
get
{
return this.GetValue(SurnameProperty) as string;
}

set
{
this.SetValue(SurnameProperty, value);
}
}

现在,当使用 NotifyPropertyChanged 系统时,我通常会在实际提交值并调用 OnPropertyChanged 之前检查“设置” block 中的值是否已更改。我应该对依赖属性做同样的事情吗?即:

        set
{
if(this.GetValue(SurnameProperty) != value)
this.SetValue(SurnameProperty, value);
}

...或者这是完全不必要的并且已经由 CLR 处理的事情?我在 MSDN 上看到的所有示例在调用 SetValue 之前都懒得做任何检查。非常感谢。

最佳答案

简短的回答是,框架已经处理好了。

实际上,根据 Adam Nathan 的“Windows Presentation Foundation”,XAML 编译器在编译时依赖于属性变形器。但是,.NET 属性包装器实际上在运行时在 XAML 中被绕过。因此,您实际上应该避免在 GetValue/SetValue 之外添加任何类型的逻辑。您在 setter 中添加的任何逻辑只有在您显式调用该属性时才会执行。但是,如果您在 XAML 中绑定(bind)该属性,运行时将跳过它。如果您的 setter 中有错误,您可能需要一些时间才能弄清楚。如果你手里拿着那本书,请参阅第 53 页。

关于C# 依赖属性 - 是否检查 CLR Wrapper 中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4548497/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com