我已经得到了以下适用的代码:
<Viewbox.Resources>
<CollectionViewSource x:Key="viewSource"
Source="{Binding Path=SelectionList}">
<CollectionViewSource.SortDescriptions>
<scm:SortDescription PropertyName="Description" />
</CollectionViewSource.SortDescriptions>
</CollectionViewSource>
</Viewbox.Resources>
<ComboBox ItemsSource="{Binding Source={StaticResource ResourceKey=viewSource}}"/>
我想将CollectionViewSource直接放在我的ComboBox中,而不使用任何类似的资源:
<ComboBox SelectedItem="{Binding Path=Value, Mode=TwoWay}">
<ComboBox.ItemsSource>
<Binding>
<Binding.Source>
<CollectionViewSource Source="{Binding Path=SelectionList}">
<CollectionViewSource.SortDescriptions>
<scm:SortDescription PropertyName="Description" />
</CollectionViewSource.SortDescriptions>
</CollectionViewSource>
</Binding.Source>
</Binding>
</ComboBox.ItemsSource>
</ComboBox>
但是这样我的ComboBox总是空的,我得到以下绑定错误:
System.Windows.Data错误:2:找不到管理FrameworkElement 或目标元素的FrameworkContentElement。 BindingExpression:路径= SelectionList;的DataItem = NULL;目标元素是 'CollectionViewSource'(HashCode = 1374711);目标属性是'来源' (输入'对象')
有谁知道我该怎么做?
答案 0 :(得分:2)
Nicolas,虽然这不是你问题的答案,因为它仍然使用资源,你可以通过在本地资源字典中定义CollectionViewSource来将它放在ComboBox中:
<ComboBox>
<ComboBox.Resources>
<CollectionViewSource x:Key="viewSource" Source="{Binding Path=SelectionList}">
<CollectionViewSource.SortDescriptions>
<scm:SortDescription PropertyName="Description" />
</CollectionViewSource.SortDescriptions>
</CollectionViewSource>
</ComboBox.Resources>
<ComboBox.ItemsSource>
<Binding Source="{StaticResource viewSource}"/>
</ComboBox.ItemsSource>
</ComboBox>
答案 1 :(得分:1)
您收到错误是因为CollectionViewSource
没有父级可以继承DataContext
以在绑定中使用。
您不需要为您的ComboBox使用CollectionViewSource
。您可以通过绑定ItemsSource
属性
<ComboBox ItemsSource="{Binding SelectionList}"
SelectedItem="{Binding Path=Value, Mode=TwoWay}" />
唯一缺少的是排序,但是您可以在将ViewModel中的数据返回到View之前对其进行排序。