我有一个包含3列的ListView(用户名,活动和组)ItemsSource绑定到staticresource
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的窗口关闭然后重新打开。如何让ListView更新以进行修改?
答案 0 :(得分:1)
您的数据对象是否实现了INotifyPropertyChanged接口?
INotifyPropertyChanged通知UI在实现它的类上发生了某些变化。值得注意的是:我不知道你用什么类型的集合来保存你的类(它被传递到CollectionViewSource),但我几乎总是使用ObservableCollections。它们实现CollectionChanged并在添加,删除项目并刷新集合时通知UI。
答案 1 :(得分:1)
你尝试使用
吗? ((CollectionViewSource)this.FindResource("SortedUsers")).View.Refresh();
虽然在MVVM中,上述步骤不允许。 因此,如果源集合(UsersList)是ObservableCollection集合视图源将自动刷新集合更改的UsersList通知。
如果有帮助,请告诉我。