在启动时,我将ObservableCollection绑定到菜单:
Menu.ItemsSource = _manager.Selection;
此菜单正确显示集合中的所有对象。
现在我想更新集合并添加/删除其中的某些项目:
private void OnBoxClick(object sender, RoutedEventArgs e)
{
_manager.Selection = _manager.GetNewSelection();
PropertyChanged?.Invoke(this, new CollectionChangeEventArgs(CollectionChangeAction.Refresh, _manager.Selection));
}
public event CollectionChangeEventHandler PropertyChanged;
但是ui仍在显示以前的样子。
缺少什么?
答案 0 :(得分:1)
您应该将Menu.ItemsSource
属性(设置为_manager.GetNewSelection()
)或从_manager.Selection
添加或删除项目。将_manager.Selection
字段设置为ObservableCollection<T>
的另一个实例不会影响菜单的ItemsSource
属性。
如果您从_manager.GetNewSelection()
获得了一个全新的收藏,那么不妨这样做:
private void OnBoxClick(object sender, RoutedEventArgs e)
{
Menu.ItemsSource = _manager.GetNewSelection();
}
然后_manager.GetNewSelection
返回ObservableCollection
还是添加或删除项目时不提供通知的其他任何类型的IEnumerable
都没关系。