C#MVVM DataGrid绑定策略?

JP *_*son 5 c# data-binding wpf datagrid mvvm

有什么区别:

<DataGrid
    ItemsSource="{Binding MyCollection}"
/>
Run Code Online (Sandbox Code Playgroud)

和...

<CollectionViewSource x:Key="CollectionData" Source="{Binding MyCollection}"/>
...
<DataGrid
    DataContext="{StaticResource CollectionData}"
    ItemsSource="{Binding}"
/>
Run Code Online (Sandbox Code Playgroud)

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

Aar*_*ver 2

MSDN 指出...

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

CollectionViewSource将实际集合与表示集合的视图分开。这使您能够更改可见集合的视觉结构(考虑在键入时过滤掉某些项目),而无需实际更改底层集合。它是包含需要视觉表示的对象的实际集合的包装器。Bea 有一篇关于它的很棒的文章

此外,您会注意到CollectionViewSource第二个示例中发生了显式换行......

Source="{Binding MyCollection}"
Run Code Online (Sandbox Code Playgroud)

然后,现在通过提供我之前提到的分离CollectionViewCource来绑定;DataGrid而在第一个示例中,集合被直接绑定到。