有什么区别:
<DataGrid
ItemsSource="{Binding MyCollection}"
/>
和...
<CollectionViewSource x:Key="CollectionData" Source="{Binding MyCollection}"/>
...
<DataGrid
DataContext="{StaticResource CollectionData}"
ItemsSource="{Binding}"
/>
它们似乎都有效。唯一的区别是第二个片段,我无法绑定(bind)到 SelectedItem。那么为什么有人会选择一种策略而不是另一种策略呢?为什么有人不直接使用第一个片段?谢谢。
最佳答案
MSDN 声明...
CollectionViewSource has a View property that holds the actual view and a Source property that holds the source collection.
CollectionViewSource将实际集合与表示集合的 View 分开。这使您能够更改可见集合的视觉结构(考虑在您键入时过滤掉某些项目)而无需实际更改基础集合。它是包含需要视觉表示的对象的实际集合的包装器。 Bea 很棒 article关于它。
此外,您会注意到在第二个示例中 CollectionViewSource
中发生了显式包装...
Source="{Binding MyCollection}"
然后 CollectionViewCource
现在通过 DataGrid
绑定(bind),提供我之前提到的分离;而在您的第一个示例中,该集合直接绑定(bind)到。
关于C# MVVM DataGrid 绑定(bind)策略?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4402794/