【问题标题】:Is it "wrong" for properties to call methods or start events [closed]属性调用方法或启动事件是否“错误”[关闭]
【发布时间】: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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    嗯,这取决于。 如果我们谈论的是一般编程指南,我会说不。不要在属性中调用方法,因为我和其他人在使用属性(写入/读取)时期望存储和检索数据。因此,如果您要更改 某些内容,请通过调用方法来更改它,该方法通过声明 其行为。

    如果不是WPF实际上是预期的行为。因此,如果 WPF 属性 适合更改内部数据,预计会以这种方式运行。

    底线:对主题没有严格的限制,但建议的准则是基于给定环境中代码的预期行为

    【讨论】:

    • 啊,所以当我提出建议时,这里的 WinForms 人会看着我,因为我犯了致命的罪行!因此,在这些情况下,实际上期望(接受)在属性中包含方法。谢谢。
    • @DaveRook:在 WPF 的情况下,是的。因为我们绑定了一个属性,并期望它会改变 ModelView 中的某些内容(如果它不是自然只读的)
    • @DaveRook:是的,对于 WindowsForms,这不是一个好主意,但同样,如果您真的需要,没有人可以限制它。这些只是指南。
    猜你喜欢
    • 2012-04-03
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-21
    • 2018-03-08
    相关资源
    最近更新 更多