【问题标题】:Refresh data in ListView刷新 ListView 中的数据
【发布时间】:2011-10-11 08:08:39
【问题描述】:

我有一个包含 3 列(用户名、活动和组)的 ListView,ItemsSource 绑定到静态资源

ItemsSource="{Binding Source={StaticResource SortedUsers}, UpdateSourceTrigger=PropertyChanged}"

静态资源定义为:

<CollectionViewSource x:Key="SortedUsers" Source="{Binding UsersList, UpdateSourceTrigger=PropertyChanged}">
            <CollectionViewSource.SortDescriptions>
                <scm:SortDescription 
                Direction="Ascending" 
                PropertyName="UserName" />
            </CollectionViewSource.SortDescriptions>
</CollectionViewSource>

用户可以选择列表中的一项并单击“修改”以更改有关用户的信息,也可以单击“添加”按钮将新用户添加到列表中。添加和修改都使用相同的模式对话框来允许设置/修改新用户。添加用户可以正常工作,一旦模式对话框关闭,新用户就会显示在列表中。但是,修改现有用户不会更新 ListView 中的数据,直到包含列表视图的窗口关闭然后重新打开。我需要做什么才能更新 ListView 以进行修改?

【问题讨论】:

    标签: wpf listview binding


    【解决方案1】:

    你试过了吗

        ((CollectionViewSource)this.FindResource("SortedUsers")).View.Refresh();
    

    虽然在 MVVM 中上述步骤是不允许的。 因此,如果源集合 (UsersList) 是 ObservableCollection 集合视图源将自动刷新用户列表的集合更改通知。

    如果这有帮助,请告诉我。

    【讨论】:

      【解决方案2】:

      您的数据对象是否实现了 INotifyPropertyChanged 接口?

      见:https://stackoverflow.com/questions/6713288/databinding-fail-after-using-controltemplate/6713334#6713334

      INotifyPropertyChanged 通知 UI 实现它的类发生了一些变化。注意:我不知道您使用哪种集合来保存您的类(它被传递到 CollectionViewSource),但我几乎总是使用ObservableCollections。它们实现了 CollectionChanged 并在添加、删除项目和刷新集合时通知 UI。

      【讨论】:

      • 感谢您的宝贵时间。是的,该对象实现了 INotifyPropertyChanged,并且列表是 ObservableCollection。如果将项目添加到列表中,列表将会增长,但由于某种原因,如果数据更改,网格中的各个字段不会更新。可能包含字段数据的底层对象没有实现 INotifyPropertyChanged。
      猜你喜欢
      • 2021-04-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多