如何在使用MVVM更改项目的名称时对列表框进行重新排序?当项目的细节发生变化时刷新列表框的顺序
我的列表框绑定到一个Observable集合,它存储了继承INotifyPropertyChanged的'People'类。列表框按属性“名称”排序,当我更改列表框中某个项目的“名称”的值时,我可以看到它的值已更改,但列表框不会自动重新排序。
最初的排序是通过CollectionViewSource
<CollectionViewSource x:Key="SortedItems" Source="{Binding PeopleList}">
<CollectionViewSource.SortDescriptions>
<scm:SortDescription PropertyName="Name"/>
</CollectionViewSource.SortDescriptions>
</CollectionViewSource>
完成,所使用的列表框如下
<ListBox ItemsSource="{Binding Source={StaticResource SortedItems}}"
SelectedItem="{Binding CurrentSelectedPerson}">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=Name}"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
当我去到不同的页面,然后回来列表框具有正确的顺序,但是当我更改人员名称时,Listbox不会刷新。在保留MVVM的同时如何做到这一点?
您的第一个链接中的链接为我提供了我实施的解决方案。我刚刚从ObservableCollection中移除/添加了该对象。这不是最优雅的解决方案,但它并不需要新界面的继承/实现,所以它看起来最干净和最快。 – n00b 2011-03-07 07:16:48