WPF计算了ViewModel和属性更改通知

时间:2016-03-13 12:44:16

标签: c# wpf mvvm

我几天前偶然发现了这个问题,似乎没有什么能给我一个解决方案 - 或者至少是一个想法。在我的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;
            }
        }

1 个答案:

答案 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;
}