C#MVVM DataGrid绑定策略?

时间:2010-12-09 20:27:37

标签: c# wpf data-binding mvvm datagrid

有什么区别:

<DataGrid
    ItemsSource="{Binding MyCollection}"
/>

和...

<CollectionViewSource x:Key="CollectionData" Source="{Binding MyCollection}"/>
...
<DataGrid
    DataContext="{StaticResource CollectionData}"
    ItemsSource="{Binding}"
/>

他们似乎都工作。唯一的区别是第二个片段,我无法绑定到SelectedItem。那么为什么有人会选择一种策略呢?为什么有人不会只使用第一个片段?感谢。

3 个答案:

答案 0 :(得分:2)

MSDN声明......

  

CollectionViewSource有一个View   保存实际视图的属性   和一个持有。的Source属性   来源集合。

CollectionViewSource从表示集合的视图中分离实际集合。这使您能够更改可见集合的可视结构(在您键入时考虑过滤掉某些项目),而无需实际更改基础集合。它是包含需要可视化表示的对象的实际集合的包装器。 Bea对此有很好的article

此外,您会注意到第二个示例中CollectionViewSource发生的明确包装......

Source="{Binding MyCollection}"

然后CollectionViewCource现在被DataGrid约束,提供我之前提到的分离;而在第一个例子中,该集合直接受到约束。

答案 1 :(得分:1)

CollectionViewSource具有更多功能,包括ObservableCollection或您用于ItemsSource的任何IEnumerable。例如,它有SortDescriptions,可以让您对数据进行分组。可以找到一个示例here

TLDR;它是一个更强大的数据结构。

答案 2 :(得分:1)

顺便提一下,如果DataGrid上的IsSynchronizedWithCurrentItem为true,则可以通过附加斜杠绑定到SelectedItem,即{Binding /}