C#MVVM DataGrid绑定策略?
问题描述:
是什么区别:...C#MVVM DataGrid绑定策略?
<DataGrid
ItemsSource="{Binding MyCollection}"
/>
和
<CollectionViewSource x:Key="CollectionData" Source="{Binding MyCollection}"/>
...
<DataGrid
DataContext="{StaticResource CollectionData}"
ItemsSource="{Binding}"
/>
他们都似乎工作。唯一的区别是第二个片段,我不能绑定到SelectedItem。那么为什么有人会选择另一种策略呢?为什么不会有人使用第一个片段?谢谢。
答
MSDN指出...
CollectionViewSource有一个View 财产保存实际视图 和保持 源集合源属性。
CollectionViewSource从表示集合的视图中分离出实际的集合。这使您可以更改可见集合的可视化结构(思考在键入时过滤掉某些项目),而无需实际更改基础集合。它是包含需要可视化表示的对象的实际集合的包装。 Bea对它有很棒的article。
此外,你会发现明确的包装发生在你的第二个例子中,CollectionViewSource
...
Source="{Binding MyCollection}"
然后CollectionViewCource
现在被绑定到通过DataGrid
提供我刚才提到的分离 - ;而集合直接绑定在你的第一个例子中。
答
CollectionViewSource具有更多的功能,ObservableCollection或其他IEnumerable
用于您的ItemsSource。例如,它具有SortDescriptions,可以让您对数据进行分组。一个例子可以发现here。
TLDR;它是一个更强大的数据结构。
答
另外,如果在DataGrid上提供了IsSynchronizedWithCurrentItem,则可以通过附加斜杠来绑定SelectedItem,即{Binding /}