私のクラスのプロパティ宣言を単純化したいと思います。問題はゲッターとセッターの定義です。私は何百ものプロパティについて全く同じことをしています。すべてのプロパティは、このように作成され、メソッド "LogPropertyChanged"もRaisePropertyChangeです。mvvmオブジェクトを単純化するWPF
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を実行します。これは可能ですか?
あなたは今日この質問をするのが二番目です。あなたの答えは「いいえ」です。ここで行うことは、フィールドを設定し、値が変更された場合には 'PropertyChanged'を発生させるSetProperty(ref T propertyField、[CallerMemberName] String propName = null)'メソッドを記述することです。ところで、私は少なくともLogPropertyChangedという名前を、それがMERELYがロギングすることを意味しない何かにリネームするでしょう。メソッドのための悪い考えではなく、非常に誤解を招く名前。 –
Visual Studioを使用している場合は、[スニペットを書き込む](https://swissarmycrowbar.wordpress.com/2016/07/19/viewmodel-property-snippets-c6/)を使用してプロパティ定義を作成します。 –
@EdPlunkett私はすでにこれらのクラスを生成するプログラムを作成しました。何千もの行を作成します。問題は、今でも私もそのアプリケーションを維持しなければならないということです;)あなたが時間があれば、私はあなたの答えをコードであまりにも魅力的にするでしょう。私はあなたのアプローチにそれを実装する方法がわからない。 – Snovva1