【问题标题】:C# MVVM DataGrid Binding Strategies?C# MVVM DataGrid 绑定策略?
【发布时间】:2011-05-23 02:44:17
【问题描述】:

有什么区别:

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

还有……

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

它们似乎都有效。唯一不同的是,第二个sn-p,我无法绑定到SelectedItem。那么为什么有人会选择一种策略而不是另一种呢?为什么有人不直接使用第一个 sn-p?谢谢。

【问题讨论】:

    标签: c# wpf data-binding mvvm datagrid


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      MSDN 状态...

      CollectionViewSource 有一个 View 拥有实际视图的属性 和一个 Source 属性,其中包含 源集合。

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

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

      Source="{Binding MyCollection}"
      

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

      【讨论】:

        【解决方案3】:

        顺便说一句,如果在 DataGrid 上 IsSynchronizedWithCurrentItem 为 true,您可以通过附加斜杠来绑定到 SelectedItem,即 {Binding /}

        【讨论】:

          猜你喜欢
          • 2015-08-06
          • 2023-04-02
          • 2021-07-07
          • 2010-10-17
          • 2013-12-17
          • 2018-02-07
          • 2011-12-04
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多