我有一个客户端服务器应用程序。 从服务器我得到一个简单的数据传输对象。 例如我有一个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