我的VS2015解决方案由两个项目组成: DataModel和DesktopClient。DataModel有一个Customer类-这是一个EntityFramework 6 DB实体。客户具有FirstName属性。在DesktopClient中有一个扩展类CustomerExt。在DesktopClient中,是否可以通知CustomerExt.FirstName的更改?在两个项目中定义一个部分客户是行不通的-- DataModel是首先编译的,而且它不会有在DesktopClient中定义的部分属性。
public class CustomerExt : Customer, INotifyPropertyChanged
{
public object Clone()
{
return this.MemberwiseClone();
}
private bool _isChecked;
public bool IsChecked
{
get { return _isChecked; }
set
{
this._isChecked = value;
NotifyPropertyChanged("IsChecked");
}
}
#region INotifyPropertyChanged
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged(String info)
{
this.PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(info));
}
}发布于 2016-08-02 01:39:16
让我看看我是否理解了,当您的日期在数据库中更新时,您希望更新视图?
您必须找到一种方法从您的ViewModel请求此信息。
某种RefreshFirstNameAsync
private string _firstName;
public string FirstName
{
get { return _firstName; }
set
{
this._firstName= value;
NotifyPropertyChanged("FirstName"); // There is better ways to implement that line
}
}
private void RefreshFirstName(){
FirstName = _userRepo.GetFirstNameAsync();
}发布于 2016-08-02 02:14:26
不幸的是,如果您的基类没有实现INotifyPropertyChanged,最安全的方法就是编写一个包装类,并且只在您的软件中使用它。您可以将其与您的CustExt相适应,或者如果您想要额外的层,也可以将其分开。
这还假设,虽然您可能无法控制Customer类,但您可以控制创建/编辑Customer实例的所有代码,以便您可以改用这个新类,然后仅在需要时才将其转换为原始的Customer类(如数据库事务)。
public class CustomerExt: INotifyPropertyChanged
{
Customer _customer = new Customer();
public object Clone()
{
return this.MemberwiseClone();
}
private bool _isChecked;
public bool IsChecked
{
get { return _isChecked; }
set
{
this._isChecked = value;
NotifyPropertyChanged("IsChecked");
}
}
#region WrapperProperties
public bool FirstName
{
get { return _customer.FirstName; }
set
{
_customer.FirstName= value;
NotifyPropertyChanged("FirstName");
}
}
#endregion
public Customer ToCustomer()
{
// returning a copy of the _customer instance here is safer than returning
// the reference, otherwise the properties could be altered directly
}
#region INotifyPropertyChanged
...
}如果您有一个在数据库调用期间使用的ICustomer接口,那么这会变得更容易一些,那么您可以跳过保留Customer实例的形式。
我记得有一些第三方库试图自动化这个过程-但我从来没有尝试过它们和/或不相信它们能正常工作。
https://stackoverflow.com/questions/38704403
复制相似问题