在我的ViewModel中,我有一个属性,它是一个模型列表:
private List<LocationModel> _locations = null;
public List<LocationModel> Locations
{
get
{
return this._locations;
}
set
{
this._locations = value;
RaisePropertyChanged("Locations");
}
}
但是LocationModel
类没有实现INotifyPropertyChanged
,因此当我更新列表中项目的属性时,UI不会更新。我尝试通过在更改列表项后手动引发事件来实现此目的,但这不起作用。有人可以解释为什么这种方法不起作用?
提前致谢。
答案 0 :(得分:2)
INotifyPropertyChanged
仅适用于实现该接口的对象的实例属性。不是实现接口的属性的属性。如果您希望此功能正常运行,LocationModel
需要实施INotifyPropertyChanged
。如果您没有LocationModel的源代码,或者由于某种原因无法更改它,则需要在实现INotifyPropertyChanged
的包装类中包装您想要响应的所有属性。您可以使用 DynamicProxy(死链接)动态换行 DynamicProxy (cached)。
答案 1 :(得分:1)
你可以使用RaisePropertyChanged(null)破解它,它会告诉视图更新所有内容,不推荐,最好的解决方案是实现INPC,或创建一个将为你实现它的LocationWrapper。如果你想变得极端,你可以使用动态对象来代理模型,或者使用动态代理来做同样的事情。
答案 2 :(得分:1)
使用ObservableCollection而不是List。对ObservableCollection内的项目的更改将触发对View的通知。
private ObservableCollection<LocationModel> _locations = null;
public ObservableCollection<LocationModel> Locations
{
get
{
return this._locations;
}
set
{
this._locations = value;
RaisePropertyChanged("Locations");
}
}