我有一個客戶端服務器應用程序。 從服務器我得到一個簡單的數據傳輸對象。 例如我有一個WPF應用程序,所以我不得不使用INotifyPropertyChanged。 現在我尋找一種優雅的方式在我的對象中實現這一點。我的優點是大多數對話框只顯示,所以沒有理由在那裏實現它,因爲在這些情況下,整個對象將被切換(爲此,我在包含對象的ViewModel中使用INotifyPropertyChanged)。現在我有一種情況,房地產在更深的結構中發生變化,我的觀點沒有注意到。使用單例類的事件處理程序爲空
我嘗試用繼承和擴展來解決它。 我寫了「自己」的課。
public class PersonCm : Person
{
public new string Course
{
get
{
return base.Course;
}
set
{
base.Course = value;
this.PropertyChanged();
}
}
因此,我從我的基類和「覆蓋」只有這些我需要我的INotifyPropertyChanged所有屬性。要添加我的功能,我使用以下兩個類:
public class ClientFunctions : INotifyPropertyChanged
{
public static readonly ClientFunctions Instance = new ClientFunctions();
private ClientFunctions()
{
// Empty
}
[field: NonSerialized]
public event PropertyChangedEventHandler PropertyChanged;
public bool SetProperty<T>(ref T storage, T value, [CallerMemberName] string propertyName = "")
{
if (object.Equals(storage, value))
{
return false;
}
storage = value;
this.OnPropertyChanged(propertyName, storage);
return true;
}
public void OnPropertyChanged(string propertyName, object sender)
{
var eventHandler = this.PropertyChanged;
if (eventHandler != null)
{
eventHandler(this, new PropertyChangedEventArgs(propertyName));
}
}
}
INotifyPropertyChanged代碼的單例類。
public static class Extension
{
public static void PropertyChanged(this BaseObject obj, [CallerMemberName] string propertyName = "")
{
ClientFunctions.Instance.OnPropertyChanged(propertyName, obj);
}
}
和一個擴展,它調用我的單例類。
我現在的問題是,每次我打電話給我的INotifyPropertyChanged代碼我的PropertyChangedEventHandler爲空,我不知道爲什麼。
有沒有人有我的想法或提示。
謝謝。沒有人訂閱我的ClientFunctions。 我將INotifyPropertyChanged添加到我的Cm-class,並使用添加和刪除將訂閱鏈接到我的ClientFunctions。 – Sukram