属性调用方法或启动事件是"错误的"

Dav*_*ave 4 c# wpf properties mvvm

命名约定意味着(通常)属性是名词,方法是动词.现在,我知道这些是指南,而不是规则,但是如果可以的话,最好遵循指南.

这意味着,以下内容

Person.Name = "Dave";
Run Code Online (Sandbox Code Playgroud)

应该只设置Name属性.我不希望这个属性看起来像

public string Name
{ 
    set
      { 
          UpdateDatabase(value);
      }
}
Run Code Online (Sandbox Code Playgroud)

我的问题几乎就是上面的例子,但与DependencyProperties有关.

我的应用程序有一个UserControl,它看起来像

 <uc:MyControl MyControlMyValue="{Binding RelativeSource={RelativeSource AncestorType=userControls:MyOtherControl}, Path=MyValue, Mode=OneWayToSource}" />
Run Code Online (Sandbox Code Playgroud)

因此,正如您在上面所看到的,当更新MyControlMyValue属性时,它会更新MyValue属性.我遇到的问题是当这个属性更新时,我需要它来执行比简单绑定更多的逻辑!

目前,我投票忽略指南并实施类似的东西

    private double _myValue;
    public double MyValue
    {
        get { return __myValue; }
        set
        {
            if (value == __myValue)
                return;

            __myValue= value;
            LookAtMeHiddenAway();
            OnPropertyChanged("MyValue");
        }
    }
Run Code Online (Sandbox Code Playgroud)

是否有更好的方法,因为它对我来说感觉非常错误?

Tig*_*ran 6

这得看情况.如果我们谈论一般的编程指南,我会说不.当我们使用我们期望存储和检索数据的属性(写/读)时,不要像我和其他人一样调用属性内的方法.因此,如果您要更改某些内容,请通过调用方法来更改它,通过声明其行为来表示.

在情况下,反而,WPF实际上是一个预期的行为.所以在的情况下,WPF性能适用于内变化的数据,并预计以这种方式行事.

底线:对主题没有强烈的限制,但建议的指南基于给定环境中代码的预期行为.