【问题标题】:WPF update View for list with INotifyPropertyChangedWPF 使用 INotifyPropertyChanged 更新列表视图
【发布时间】:2020-03-04 07:28:50
【问题描述】:

我知道实际的方法是使用ObservableCollection。我想教某人 WPF,并从绑定到 List<MyPoco>ItemsControl 开始。现在我正在实施RemoveCommand。我计划做的事情是这样的:

private void Remove(MyPoco obj) 
{
    if (MyList.Contain(obj)) 
    {
        MyList.Remove(obj);
        OnPropertyChanged(nameof(MyList));
    }
}

我希望 WPF 更新视图。为什么这不起作用?

我正在以正确的方式实施INotifyPropertyChanged。它适用于其他属性。

【问题讨论】:

  • 仅用那个短代码很难分辨。但也许你的 ViewModel 没有实现 INotifyPropertyChanged。
  • 你在执行INotifyPropertyChanged吗?

标签: c# wpf data-binding


【解决方案1】:

您通知MyList 属性已更改,但视图确实意识到它已显示存储在MyList 属性中的该实例,因此没有更新。

你可以试试这个代码

private void Remove(MyPoco obj) 
{
    MyList = MyList.Where( e => e != obj ).ToList();
    OnPropertyChanged(nameof(MyList));
}

现在有一个新的列表实例,视图将更新。

【讨论】:

  • 如果您说的是真的,那么将 MyList 属性更改为 IEnumerable 并将支持字段设置为 List 也应该可以。
  • 好吧,这是有道理的。谢谢。
  • @FlaGon 我没明白你的意思。不同的类型将如何导致不同的值 - 它是对实例的相同引用
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-06-02
  • 1970-01-01
  • 2021-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-12
相关资源
最近更新 更多