ObservableCollection根本不起作用

时间:2014-10-22 13:01:57

标签: c# wpf mvvm

我有这段代码:

private ObservableCollection<Stats> _stats;

public StatisticsViewModel()
{
    Stats = new ObservableCollection<Stats>();
    Stats.Add(new Stats() { Type = "Min", Price = 100, Legend = Legend.Default });
}

public ObservableCollection<Stats> Stats
{
    get 
    { 
        return _stats; 
    }
    set
    {
        if (_stats != value)
        {
            _stats = value;
            RaisePropertyChanged("Stats");
        }
    }
}

创建新集合时,将调用Stats集。但是,在添加对象时,它没有,因此它不会执行RaisePropertyChanged ......

我该怎么做才能解决这个问题?

1 个答案:

答案 0 :(得分:1)

  

创建新集合时,将调用Stats集。

正确。这是因为代码设置了Stats属性,该属性调用了setter方法。

  

但是,在添加对象时,它没有,因此它不会执行RaisePropertyChanged

也正确。在对象上调用.Add时,代码不是设置保存该对象的属性。所以没有理由调用setter方法。在这种情况下,Stats属性本身未被更改,您只是与对象进行交互。

  

我该怎么做才能解决这个问题?

您可以订阅的ObservableCollection班级exposes two events。当集合本身发生更改时,将引发CollectionChanged事件,并且当集合上的属性值发生更改时,将引发PropertyChanged事件。

例如,如果要在集合更改时处理事件,可以订阅该事件:

Stats.CollectionChanged += CollectionChangeHandler;

// elsewhere...

private void CollectionChangeHandler(object sender, NotifyCollectionChangedEventArgs e)
{
    // do something to respond to the changed collection
}