在ListView中刷新数据

时间:2011-07-22 19:51:01

标签: wpf listview binding

我有一个包含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更新以进行修改?

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:1)

你尝试使用

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

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

如果有帮助,请告诉我。