C# 是不是;“错误”;用于属性调用方法或启动事件

C# 是不是;“错误”;用于属性调用方法或启动事件,c#,wpf,mvvm,properties,C#,Wpf,Mvvm,Properties,命名约定意味着(通常)属性是名词,方法是动词。现在,我知道这些是指南,不是规则,但如果你能做到的话,最好遵循指南 这意味着: Person.Name = "Dave"; 应仅设置Name属性。我不希望这房子看起来像这样 public string Name { set { UpdateDatabase(value); } } 我的问题几乎就是上面的例子,但与从属财产有关 我的应用程序有一个UserControl,看起来像 <uc

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

这意味着:

Person.Name = "Dave";
应仅设置Name属性。我不希望这房子看起来像这样

public string Name
{ 
    set
      { 
          UpdateDatabase(value);
      }
}
我的问题几乎就是上面的例子,但与从属财产有关

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

 <uc:MyControl MyControlMyValue="{Binding RelativeSource={RelativeSource AncestorType=userControls:MyOtherControl}, Path=MyValue, Mode=OneWayToSource}" />
有没有更好的方法,因为我觉得这是非常错误的

那要看情况了。 如果我们谈论的是通用编程指南,我会说不。不要在属性中调用方法,因为我和其他人在使用属性(写/读)时,我们希望存储和检索数据。因此,如果您要更改某些内容,请通过调用一个方法来更改它,该方法通过声明其行为来体现

在这种情况下,而不是
WPF
,这实际上是一种预期的行为。因此,在
WPF的情况下,
属性适用于更改内部数据,并期望以这种方式运行


一句话:主题没有严格的限制,但建议的指导原则基于给定环境中代码的预期行为。

我将创建一个名为OnMyValueChanged的事件,当该属性更改时需要更新的任何内容都将向该事件注册一个处理程序。或处理PropertyChanged事件。这实际上是同一件事,但它避免在setter中放入不直接适用于属性的逻辑(例如约束值)

啊,那就是WinForms的家伙看着我,因为我犯了一个致命的罪,当我建议的时候!因此,在这些情况下,实际上期望(接受)在属性中包含方法。谢谢。@DaveRook:如果是WPF,是的。因为我们绑定了一个属性,并期望它会改变ModelView中的某些内容(如果它不是readonly naturally)@DaveRook:是的,这不是一个好主意,但是,如果你真的需要,没有人可以限制它。这些只是指南。读取属性应该很快。但是写下来怎么样?您正在那里引发一个事件,因此设置它时可能会运行任意代码。如果是这样的话,是什么阻止你调用一个方法呢?是的@Kris,你是对的,但是这个暗示是由微软设计的,出于某种原因,我觉得这是规则的唯一例外。。。我对这个世界(编程)还是新手,因此指南对我很重要。仅供参考,更新绑定时不会调用类中的DependencyProperty setter/getter。绑定系统在较低的级别处理这个问题,因此您希望在setter/getter中运行的任何代码都不会被调用。
    private double _myValue;
    public double MyValue
    {
        get { return __myValue; }
        set
        {
            if (value == __myValue)
                return;

            __myValue= value;
            LookAtMeHiddenAway();
            OnPropertyChanged("MyValue");
        }
    }