我有一個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