MVVMパターン、.NET Framework 4.6.1でWPFを開発しています。とC#。継承の代わりに合成
public class ObservableObject : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected void RaisePropertyChangedEvent(string propertyName)
{
var handler = PropertyChanged;
if (handler != null)
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
そして:
私の質問は、WPFに関するものではありません、それはこの2つのクラスを有する組成物の代わりに、継承を使用してのことだObservableObject
から
public class MainViewModel : ObservableObject
{
private string statusPrinter;
public string StatusPrinter
{
get { return statusPrinter; }
set
{
statusPrinter = value;
RaisePropertyChangedEvent("StatusPrinter");
}
}
}
MainViewModel
継承し、私はしたくありません継承を使用する。
public class MainViewModel
{
private string statusPrinter;
private ObservableObject observable;
public string StatusPrinter
{
get { return statusPrinter; }
set
{
statusPrinter = value;
observable.RaisePropertyChangedEvent("StatusPrinter");
}
}
public MainViewModel()
{
observable = new ObservableObject();
}
}
をしかし、私が組成物を使用する場合ObservableObject
にpublic event PropertyChangedEventHandler PropertyChanged;
に問題があるようです:
私はこれを行うことができます。問題は、XAMLリンク時です。
ここでコンポジションを使用できますか、または継承を使用する必要がありますか?
非常に奇妙な要件です。なぜここに継承したくないのですか? – Dennis
@Dennis「Microsoft .NET:エンタープライズ向けアプリケーションの構築、第2版」という本を読んで、継承を回避する方法について説明します。 – VansFannel
あなたの将来のために、ハードコーディングされた文字列を 'nameof'ステートメントに置き換えてください! .NET 4.6.1をターゲットにしている場合は、C#6を使用しても問題ありません。 – TheInnerLight