我有一个 MVVM 集合,我“知道”它在 VM 中重新排序,但未在视图中以新顺序显示。给定类似于下面的代码,我是否应该期望列表在不操作 CollectionViewSource 的情况下以新的排序重新显示?
xml
<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>
虚拟机
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);
}
更新
顺序正在更改,但与预期不同(而不是调试器显示新排序的 ObsCollection 的内容)。我还尝试放弃 ObsCollection 以支持直接绑定到 IEnumerable 并获得完全相同的结果。
有没有人看到建议修复的模式?