2011-03-07 35 views
2

如何在使用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的同时如何做到这一点?

回答

2

嗯,这是一个已知的问题。我想这没有得到解决yet.Try实现自定义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/

+0

您的第一个链接中的链接为我提供了我实施的解决方案。我刚刚从ObservableCollection中移除/添加了该对象。这不是最优雅的解决方案,但它并不需要新界面的继承/实现,所以它看起来最干净和最快。 – n00b 2011-03-07 07:16:48

相关问题