私はFodyを使用して、コンパイル時にプロパティ変更されたコードを注入します。あなたのクラスは[ImplementPropertyChanged]属性を取得し、次に{get;セット; }プロパティは、コンパイルされたコードのプロパティを通知するようになります。定型が大幅に削減されていることを示す、
public abstract class BindableBase : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected bool SetProperty<T>(ref T storage, T value, [CallerMemberName] string propertyName = null)
{
if (Equals(storage, value))
{
return false;
}
storage = value;
// ReSharper disable once ExplicitCallerInfoArgument
OnPropertyChanged(propertyName);
return true;
}
protected void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
protected void OnPropertiesChanged(params string[] propertyNames)
{
foreach (string propertyName in propertyNames)
{
// ReSharper disable once ExplicitCallerInfoArgument
OnPropertyChanged(propertyName);
}
}
}
使用例:あなたは、基本クラスを使用するオプションを持っている場合
https://github.com/Fody/PropertyChanged
名前を渡す必要はありません。void OnPropertyChanged([CallerMemberName] String propertyName = null)を使用してください。今度は、属性を持つ定型文の残りの部分を解決するフレームワークがありますが、それまでに私はそれを調べました。別のオプションは、任意の値(CallerMemberNameトリックも含む)を取得/設定してイベントを発生させる汎用コードを持つDictionaryラッパーのようなものです。次に、例えば 'get {return props.Get ()}'と 'set {props.Set(value);}を持っています。 } ' –
stijn
Resharperのような適切なツールを使用して、定型コードを生成することもできます(または少なくとも簡単にすることができます)。 – Evk