【发布时间】:2019-01-05 13:36:16
【问题描述】:
首先,我使用的是 .NET Framework 3.5 C# 3.0 和 Visual Studio 2008。
话虽如此...在 WPF 应用程序中使用 MVVM 模式时,我总是使用视图模型属性绑定到视图中的对象。从集合实现调用 OnPropertyChanged 时,我总是将属性名称硬编码为字符串。
private string _myProperty;
public string MyProperty
{
get
{
return _myProperty;
}
set
{
if (_myProperty == value) return;
_myProperty = value;
OnPropertyChanged("MyProperty");
}
}
所以我一直认为是否有任何方法可以避免属性名称被硬编码。
我知道有一些方法,例如使用here 和here 解释的nameof,但这仅在C# 6.0(.NET Framework 4.6 及更高版本)中可用。
还存在 CallerMemberName 属性,如 here 和 here 所述,但它再次发布,仅在 C# 5.0 (.NET Framework 4.5) 及更高版本中可用。
所以我使用的是 .NET Framework 3.5 C# 3.0,因此我不能使用这种方法。
那么在将属性名称作为参数传递给 OnPropertyChanged 方法时,如何避免对属性名称进行硬编码?我想要一个不影响性能的解决方案。
【问题讨论】:
-
请问为什么要使用这么老的框架?
-
如果您对 Flat Eric 对您的问题的回答不满意,请查看 Mark Gravell 对此问题的回答(注意这不是公认的答案)stackoverflow.com/questions/491429/… 也许它会为您指明正确的方向避免字符串的方向,但我不确定它是否会满足您的性能需求,因为它使用反射和 lambdas。
-
@KlausGütter 这很简单:因为我目前所在的公司已经过时,并且他们已经多年没有更新/迁移他们的应用程序到新的框架,所以现在所有的应用程序都已构建使用这个旧框架,它们需要维护。它们是中型和复杂的应用程序,不容易快速迁移,需要大量时间来分析和迁移它们。也许您在想……“那么为什么不将应用程序迁移到新的 .NET Framework?您还在等什么?”
-
@KlausGütter 因为这里有很多因素需要考虑:我们是一个非常非常小的团队,而且我们每个人每天都要做很多工作,我们非常劳累,所以我们没有时间投资迁移。老板也有不正确的想法:“应用程序正在运行,为什么要迁移?”这是不正确的,很多次我告诉他和团队的其他成员我们现在必须迁移他们,但他们既不倾听也不承认想法(都是借口)所以很难与这样的人合作......
-
@KlausGütter 似乎他们不想发展,他们被利用了。另一个问题是公司的心态:负责招聘的人不想雇佣更多的程序员/分析师。结果是:一个非常非常小的团队,在旧框架中维护了很多应用程序。我们需要更多的程序员,但是……这就是现实。有公司有公司....有老板有老板....情景和情景等等....
标签: c# wpf mvvm properties .net-3.5