【发布时间】:2013-12-04 08:21:27
【问题描述】:
命名约定意味着(通常)属性是名词,方法是动词。现在,我知道这些是指南,而不是规则,但最好尽可能遵循指南。
这意味着,以下
Person.Name = "Dave";
应该只设置 Name 属性。我不希望该物业看起来像
public string Name
{
set
{
UpdateDatabase(value);
}
}
我的问题与上面的示例几乎完全相同,但与 DependencyProperties 有关。
我的应用程序有一个 UserControl,它看起来像
<uc:MyControl MyControlMyValue="{Binding RelativeSource={RelativeSource AncestorType=userControls:MyOtherControl}, Path=MyValue, Mode=OneWayToSource}" />
因此,正如您在上面看到的,当更新 MyControlMyValue 属性时,它会更新 MyValue 属性。我遇到的问题是,当更新此属性时,我需要它来执行比简单绑定更多的逻辑!
目前,我投票决定忽略该指南并实施类似
private double _myValue;
public double MyValue
{
get { return __myValue; }
set
{
if (value == __myValue)
return;
__myValue= value;
LookAtMeHiddenAway();
OnPropertyChanged("MyValue");
}
}
有没有更好的方法,因为它确实让我觉得很不对劲?
【问题讨论】:
-
读取属性应该很快。但是怎么写呢?您正在那里引发一个事件,因此在您设置它时可以运行任意代码。如果是这样的话,是什么阻止你调用一个方法?
-
是的@Kris,你是对的,但这个含义是由微软设计的,出于某种原因,我觉得这是规则的唯一例外......我对这个世界还是新手(编程)所以这些指南对我来说很重要。
-
仅供参考,当绑定更新时,不会调用类中的 DependencyProperty 设置器/获取器。绑定系统在低级别处理此问题,因此您希望在 setter/getter 中运行的任何代码都不会被调用。
标签: c# wpf mvvm properties