我有一个MVVM集合,我“知道”在虚拟机中重新排序,但未在视图中以新顺序显示。给定类似于下面的代码,我是否应该期望列表以新的排序重新显示而不用操作CollectionViewSource?对绑定的可观察集合进行排序
XAML
<Menu Name="_mainMenu" Height="22" >
<MenuItem Header="Language"
ItemsSource="{Binding AvailableCultures}" >
<MenuItem.ItemTemplate>
<DataTemplate>
<MenuItem IsCheckable="True"
IsChecked="{Binding IsSelected, Mode=TwoWay}"
Header="{Binding DisplayName}"/>
</DataTemplate>
</MenuItem.ItemTemplate>
</MenuItem>
</Menu>
VM
public ObservableCollection<OptionLocalizedViewModel<CultureInfo>>
AvailableCultures { get; private set; }
private void OnSelectionChange(OptionLocalizedViewModel<CultureInfo> option)
{
...
var sorted = AvailableCultures.OrderBy(x => x.DisplayName);
AvailableCultures =
new ObservableCollection<OptionLocalizedViewModel<CultureInfo>>(sorted);
NotifyOfPropertyChange(() => AvailableCultures);
}
UPDATE
顺序是被改变,但不如预期(而不是调试器显示新排序ObsCollection是)。我也尝试抛开ObsCollection,直接用IEnumerable绑定,获得完全相同的结果。
有没有人看到一种模式,表明修复?
做了一个类似的程序,它为我工作,你确定你的NotifyOfPropertyChange工作正常吗? – 2012-08-17 01:02:47
@KDiTraglia。不,现在一切都是可疑的。我甚至想知道如果我需要一个正在被替换的ObservableCollection,但正如你可以看到它在那里。 – Berryl 2012-08-17 01:11:11
因为您正在开发并更换整个系列,所以需要它。 – 2012-08-17 01:27:18