【问题标题】:Refresh converted bindings in WPF ListView在 WPF ListView 中刷新转换后的绑定
【发布时间】:2013-01-30 22:11:36
【问题描述】:

我有一个带有 GridView(多列)布局的 ListView。某些列的转换器使用当前语言环境来美化数字,将 unix 时间戳转换为日期时间字符串,或者只是将枚举转换为它的本地化描述。

语言环境可以在运行时更改,因此我需要一种方法来重新运行这些转换器。请注意,绑定的值本身并没有改变,但是转换器的输出可能会随着语言环境的不同而不同。

最好的方法是什么?我不想迭代每个受影响列表的整个集合并调用 OnPropertyChanged。有没有办法强制 ListView 刷新每个绑定,或者只刷新某些列的绑定?

【问题讨论】:

    标签: c# wpf binding


    【解决方案1】:

    我找到了答案:

    ICollectionView view = CollectionViewSource.GetDefaultView(MyListView.ItemsSource);
    view.Refresh();
    

    【讨论】:

      【解决方案2】:

      您可以强制 ListView 使用以下内容更新 ItemsSource 绑定:

      lview.GetBindingExpression(ListView.ItemsSourceProperty).UpdateTarget();
      

      使用相同的语法,您当然可以变得更具体,并且仅对特定列的绑定强制更新,但根据 ListView 中的行数,您可能看不到性能差异。

      【讨论】:

      • GetBindingExpression 为我返回 null。难道是因为我没有绑定ItemsSouce?
      • 是的,GetBindingExpression 的参数必须是具有绑定的属性。因此,在没有看到您的 xaml 的情况下,我无法准确说出它的外观,但这种方法将强制更新特定的绑定。
      • 我正在寻找更新源集合对象的绑定,而不是集合本身。
      猜你喜欢
      • 2010-11-22
      • 1970-01-01
      • 2016-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多