【发布时间】:2012-04-19 23:55:15
【问题描述】:
我有一堆组合,它们都有相同的可用选择。这些选择在我的 ViewModel 公开的集合中提供。一切都很好。
我现在想要对这些选择进行排序,因此我决定从我的 ViewModel 中公开一个 ICollectionView 而不是我通常的 ReadonlyObservableCollection<T>,并在我的 ViewModel 中对集合视图进行排序。
class EditStuffViewModel : ViewModelBase
{
public EditStuffViewModel (ObservableCollection<Choice> choices)
{
Choices = new CollectionViewSource() { Source = choices }.View;
Choices.SortDescriptions.Add(new SortDescription("Name", ListSortDirection.Ascending));
}
public ICollectionView Choices
{
get;
private set;
}
//snip other properties
}
这一切都很好,除了现在我所有的组合现在都同步他们的选择。
这不是我想要的。我希望共享选择,但选择要与其正常绑定。我想我知道我的 CollectionView 正在跟踪选择,但我认为这是每个控件都选择加入的行为。
我尝试在我的组合上显式设置IsSynchronizedWithCurrentItem="False",这成功地将它们解耦,但是我的绑定SelectedItem 从未在组合中选择(调用了ViewModel 的绑定getter,但从未选择过结果)。选择一个项目似乎可以正确更新我的 ViewModel 的设置器。
我显然遗漏了 CollectionView 应该如何工作的基础知识。任何人都可以启发我吗?
编辑:我的错,这确实适用于IsSynchronizedWithCurrentItem="False"。详情见我的回答。
干杯。
【问题讨论】:
-
在 IsSynchronizedWithCurrentItem="False" 的解决方案中,您是否使用了 INotifyPropertyChanged? OnPropertyChanged("SelectedItem")
标签: c# wpf combobox selecteditem collectionviewsource