0

我正在使用 WPF 和 MVVM,因此我的视图模型中有很多属性绑定到视图中的内容。这些属性中的大多数看起来像这样......

private DateTime _newRevisionDate = DateTime.Now;

public DateTime NewRevisionDate {
  get {
    return _newRevisionDate;
  }
  set {
    if (_newRevisionDate != value) {
      _newRevisionDate = value;
      RaisePropertyChanged(ViewModelUtils.GetPropertyName(() => NewRevisionDate));
    }
  }
}

我正在使用 MvvmLight,这是 RaisePropertyChanged() 方法的来源,并且使用了 ViewModelUtils.GetPropertyName() 方法从属性名称创建字符串,从而避免了对魔术字符串的需要。

现在的问题是,如果我在视图模型中添加一些这样的属性,我最终会得到大量几乎相同的代码。这只是需要一些巧妙的重构,所以我可以只使用一行代码来定义每个属性。

但是,我还没有找到任何方法来做到这一点。能够做一些像标准 C# 自动属性这样的事情会很好......

public DateTime NewRevisionDate { get; set; }

...但是只要将属性设置为新值,就让它调用 RaisePropertyChanged() 。

有人有什么想法吗?谢谢

4

1 回答 1

3

这只是需要一些巧妙的重构,所以我可以只使用一行代码来定义每个属性。

好吧,您现在可以将其设为单行。这只是一条很的线:)

C# 5 使用caller info attributes使这更容易一些,因此您不需要该GetPropertyName部分 - 这是当前代码中最丑陋的部分。

您可以做的另一件事是:

set
{
  _newRevisionDate = PossiblyFireEvent(RaisePropertyChanged, _newRevisionDate, value);
}

wherePossiblyFireEvent将使用调用方信息属性将属性名称作为可选参数,RaisePropertyChanged作为在两个值不相等时执行的委托,并始终返回value。不确定它是否值得。

于 2013-05-01T14:33:59.400 回答