我几天前偶然发现了这个问题,似乎没有什么能给我一个解决方案 - 或者至少是一个想法。在我的ViewModel A中,我有一个计算属性,它生成一个ViewModels B的ObservableCollection。我可以绑定到这个集合没问题,但ViewModel B项属性的更改不会显示在UI中。任何想法将不胜感激,并毫不犹豫地要求任何澄清或细节。提前谢谢!
更新:这是不通知的属性
public Boolean IsHighlighted
{
get { return _IsHighlighted; }
set
{
if (_IsHighlighted != value)
{
_IsHighlighted = value;
OnPropertyChanged("IsHighlighted");
}
}
}
和在ViewModel A中生成集合的计算属性
public ObservableCollection<PointViewModel> MidPoints
{
get
{
ObservableCollection<PointViewModel> midPoints = new ObservableCollection<PointViewModel>();
//
//....calculations
//
return midPoints;
}
}
答案 0 :(得分:1)
不要在ObservableCollection<PointViewModel>
属性获取器中创建新的MidPoints
实例。
而是在现有实例上执行添加和删除操作:
private readonly ObservableCollection<PointViewModel> midPoints
= new ObservableCollection<PointViewModel>();
public ObservableCollection<PointViewModel> MidPoints
{
get { return midPoints; }
}
public void UpdateMidPoints()
{
// performs calculations that add and remove elements to/from midPoints
// ...
}
如果出于任何原因需要创建新的集合实例,则必须引发PropertyChanged事件:
private ObservableCollection<PointViewModel> midPoints;
public ObservableCollection<PointViewModel> MidPoints
{
get { return midPoints; }
set
{
midPoints = value;
OnPropertyChanged("MidPoints");
}
}
public void UpdateMidPoints()
{
ObservableCollection<PointViewModel> newMidPoints
= new ObservableCollection<PointViewModel>();
//
// calculations...
//
MidPoints = newMidPoints;
}