【问题标题】:Invoke a method from baseclass when property is set设置属性时从基类调用方法
【发布时间】:2018-05-12 03:11:23
【问题描述】:

目前我正在使用 MVVM 风格的 WPF 应用程序进行编码。 我想用一些新的东西来扩展我当前的 BaseViewModel,让事情变得更容易和更快。 我要添加的一项功能是观察所有属性(具有特定属性)并在默认更改属性时调用PropertyChanged 事件。 (这个功能更多的是懒惰,所以没那么重要但是不知道怎么实现)

目前我在子类中定义一个属性,如下所示:

private string _foo;
public string Foo
{
    get { return _foo; }
    set { _foo = value; OnPropertyChanged(); }
}

我打算定义如下属性(因为它更快且代码更少):

[Observe]
public string Foo { get; set; }

当调用“set”方法时,是否有任何有效的方法可以为每个子类中的每个“标记”属性默认调用属性更改事件?

【问题讨论】:

  • 虽然可以进行一些花哨的动态代码生成,但它比它更值得。如果编写代码太乏味,我建议创建一个 sn-p。
  • 我不确定您为什么要标记属性以便稍后通知。你可以提前通知。解决方案很可能涉及在运行时可能非常慢的属性和反射。另一种解决方法是在属性更改时更新ViewModelModel,以便您可以跟踪数据的每次更改。
  • 我建议看看 MVVM light 是如何做到这一点的。没有注释,但他们有一个 Set 方法,可以执行所有检查并在必要时 RaisePropertyChange。示例:mvvmlight.net/help/SL5/html/…
  • 顺便说一句,如果您正在为此寻找一段反射代码,我建议您在没有 mvvm 和 wpf 标签的情况下提问

标签: c# wpf mvvm


【解决方案1】:

您可能想看看Fody

它在编译时将INotifyPropertyChanged 代码注入到属性中。

【讨论】:

  • 这实际上看起来很有趣。我会试试看 Fody 是否适合我的目的。如果这不起作用,我会寻找一个 Visual Studio 代码快捷方式来填写代码
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-12-08
  • 1970-01-01
  • 2010-10-20
  • 1970-01-01
  • 2011-07-25
  • 1970-01-01
  • 2018-06-21
相关资源
最近更新 更多