ObservableCollection不更新UI

时间:2018-10-11 13:48:46

标签: c# wpf data-binding

在启动时,我将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仍在显示以前的样子。

缺少什么?

1 个答案:

答案 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都没关系。