当项目的详细信息发生更改时,刷新列表框的顺序

时间:2011-03-07 03:56:01

标签: wpf

如何在使用MVVM更改项目名称时重新排序我的列表框?

我的列表框绑定到一个Observable集合,该集合存储一个继承INotifyPropertyChanged的'People'类。列表框按属性“名称”排序,当我更改列表框中某个项目的“名称”值时,我可以看到它的值已更改,但列表框不会自动重新排序。

初始排序是通过CollectionViewSource

完成的
    <CollectionViewSource x:Key="SortedItems" Source="{Binding PeopleList}">
        <CollectionViewSource.SortDescriptions>
            <scm:SortDescription PropertyName="Name"/>
        </CollectionViewSource.SortDescriptions>
    </CollectionViewSource>

并由Listbox使用如下

    <ListBox ItemsSource="{Binding Source={StaticResource SortedItems}}"
             SelectedItem="{Binding CurrentSelectedPerson}">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <TextBlock Text="{Binding Path=Name}"/>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>

当我转到另一个页面并返回时,列表框具有正确的顺序,但是当我更改列表框不刷新的人的名称时。如何在保留MVVM的同时完成这项工作?

2 个答案:

答案 0 :(得分:2)

这是一个已知的问题,我想还没有解决。尝试实现自定义的CollectionViewSource,如下面的链接所示

http://social.msdn.microsoft.com/Forums/en/wpf/thread/d7eda358-ca16-4164-8773-fd92527c7795

还要检查此帖子是否有替代

http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/cb7c5c62-7ca9-49b5-91a0-379581b1c1aa/

答案 1 :(得分:1)

This link讨论了这个问题 - 并提出了几个答案。