【问题标题】:Force DataGrid update when ItemsSource has converter applied当 ItemsSource 应用了转换器时强制 DataGrid 更新
【发布时间】:2012-02-12 20:19:32
【问题描述】:

ItemsSource:原始数据的 ObservableCollection。 转换器:通过对 ItemsSource 应用复杂的非线性变换来生成视图模型。转换器输出是一个简单的列表。

我知道设计是错误的,我应该使用 NotifyPropertyChanged 事件创建视图模型层,但这是一个快速原型,我只是希望有一个简单的技巧可以在 ItemsSource 更新时强制 DataGrid 重新运行转换器。

【问题讨论】:

  • 添加字符串属性和移动转换器中的内容有什么难的?
  • @BalamBalam,转换器不是在项目级别而是在列表级别进行转换,并且转换不是简单的映射。一个类似的例子是将一个日历事件列表(每个事件都有一个开始时间和一个持续时间)转换为一个日期时间列表,每个事件都具有布尔属性“某事从这里开始”和“某事在此结束”。

标签: wpf data-binding datagrid converter itemssource


【解决方案1】:

您的收藏的变化来自哪里 - 一个按钮?如果它只是一个原型,那么我会使用一个 List,在其间放置一个 CollectionView,然后调用 CollectionView.Refresh() 来显式刷新。

解决方案 OnPropertyChanged("Data");看起来它可以循环。

【讨论】:

    【解决方案2】:

    您可以在集合更改时触发属性级更改通知,这会强制重新评估 ItemsSource 绑定。

    //Data being the ObservableCollection
    Data.CollectionChanged += (s,e) => OnPropertyChanged("Data");
    

    【讨论】:

    • “数据”是分配给 ItemsSource 的 ObservableCollection 吗?我应该把这个 sn-p 放在哪里?
    • @user986080:如果您允许更改属性,则应将处理程序附加到属性的设置器中(然后您还应该使用命名方法并将处理程序与分配给属性的前一个实例分离)。如果属性的支持字段是只读的(我强烈建议),您可以将其放在所属类的构造函数中,因为实例永远不会改变。
    猜你喜欢
    • 2011-11-22
    • 2014-08-17
    • 2011-10-26
    • 1970-01-01
    • 1970-01-01
    • 2010-11-09
    • 2012-06-22
    • 2017-07-11
    • 2012-04-10
    相关资源
    最近更新 更多