我的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));
}
}
答案 0 :(得分:0)
让我看看,如果我理解,您希望在数据库上更新日期时更新视图吗?
您必须找到一种从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();
}
答案 1 :(得分:0)
不幸的是,如果你的基类没有实现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实例的形式。
我记得有一些第三方图书馆试图让这个过程自动化 - 但我从来没有尝试过它们,并且/或者不相信它们能够正常工作。