虽然您没有包含items属性的代码段,但我想问题是在修改属性值(即更改对另一个对象的引用)时,您没有触发PropertyChanged事件。
如果要保留不起作用的代码,则应实现以下项属性:
private IEnumerable<Item> items;
public IEnumerable<Item> Items
{
get { return this.items; }
set
{
this.items = value;
// Call OnPropertyChanged whenever the property is updated
OnPropertyChanged("Items");
}
}
protected void OnPropertyChanged(string name)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(name));
}
}
使用这个实现,您不需要将items集合作为observablecollection,但是每次您想要修改它(添加或删除项),都应该完全替换它。
当然,您可以将类型保留为ObservableCollection而不是IEnumerable,但是要考虑到这种类型的集合对列表或数组等其他集合的开销。