【发布时间】:2011-05-31 17:09:03
【问题描述】:
在 C# 中编写自定义依赖属性时,一个相当常见的包装器类似于:
public string Surname
{
get
{
return this.GetValue(SurnameProperty) as string;
}
set
{
this.SetValue(SurnameProperty, value);
}
}
现在,当使用 NotifyPropertyChanged 系统时,我通常会在实际提交值并调用 OnPropertyChanged 之前检查“set”块中的值是否已更改。我应该对依赖属性做同样的事情吗?即:
set
{
if(this.GetValue(SurnameProperty) != value)
this.SetValue(SurnameProperty, value);
}
...或者这是完全没有必要并且已经由 CLR 处理的事情?在调用 SetValue 之前,我已经看到 MSDN 上的所有示例都无需进行任何检查。非常感谢。
【问题讨论】:
-
您的 getter/setter 可能并不总是被调用。 WPF 将直接尝试设置值。
-
感谢提醒!就我而言,有时我还通过 CLR 包装器而不是通过绑定来设置值,所以问题确实与这种情况有关。尽管如此,考虑依赖属性如何真正起作用并没有任何害处。干杯。
标签: c# optimization binding dependency-properties