【发布时间】:2017-01-18 00:30:26
【问题描述】:
我想简化我的类中的属性声明。问题在于 getter 和 setter 的定义。我对数百个属性做的完全一样。所有属性都是这样创建的,其中“LogPropertyChanged”方法也是 RaisePropertyChange。
public class PCS_MA_V1_ALARMSTAT : ViewModelBase
{
private Boolean _ActionAlarmHighHigh;
public Boolean ActionAlarmHighHigh
{
get
{
return _ActionAlarmHighHigh;
}
set
{
if(value!= _ActionAlarmHighHigh)
{
_ActionAlarmHighHigh = value;
LogpropertyChanged("ActionAlarmHighHigh", oldVal, newVal);
}
}
}
private Boolean _ActionAlarmLowLow;
public Boolean ActionAlarmLowLow
{
get
{
return _ActionAlarmLowLow;
}
set
{
if(value!= _ActionAlarmLowLow)
{
_ActionAlarmLowLow = value;
LogpropertyChanged("ActionAlarmLowLow", oldVal, newVal);
}
}
}
}
现在我认为这种语法非常复杂,而且使用起来非常麻烦。有没有办法可以像这样创建类:
public class PCS_MA_V1_ALARMSTAT: ViewModelBase
{
public Boolean ActionAlarmHighHigh { get; set; }
public Boolean ActionAlarmLowLow { get; set; }
}
然后监控实例。如果某个属性已更改,我会在该特定属性上运行 LogPropertyChanged。这可能吗?
【问题讨论】:
-
你是今天第二个问这个问题的人。对你来说,答案也是“不”。人们做在这里所做的是编写一个
SetProperty<T>(ref T propertyField, [CallerMemberName] String propName = null)方法,该方法设置字段并在值更改时引发PropertyChanged,并且它也可以记录。顺便说一句,我至少会将LogpropertyChanged重命名为并不意味着它仅进行日志记录的名称。方法不错,但名称很容易误导。 -
然后 write a snippet 创建属性定义,如果您使用的是 Visual Studio。
-
@EdPlunkett 我已经创建了一个生成这些类的程序。它创建了数千行。问题是现在我还必须维护该应用程序... ;) 如果您有时间,我会非常感谢您在代码中的回答。我不知道如何用你的方法来实现它。
-
Here's an example 如何使用面向方面的编程将冗余重构为简单的属性。不过,如果您不熟悉属性和 AOP,我认为可能很难掌握。据我所知,没有包含这些属性的库。
标签: c# wpf mvvm properties