我有一个客户端服务器应用程序。从服务器我得到一个简单的数据传输对象。例如
public class Person:BaseObject
{
public string Name { get; set; }
public string Course { get; set; }
public Person( string name )
{
this.Name = name;
}
}
在客户端我有一个 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 都是空的,我不知道为什么。
有没有人对我有想法或提示。