代码之家  ›  专栏  ›  技术社区  ›  Mathieu Guindon

如何在XAML中为自定义DataGrid控件指定GroupDescriptions?

  •  3
  • Mathieu Guindon  · 技术社区  · 10 年前

    我有一个 GroupingGrid 基本上是定制的控件 DataGrid 。我通过使ViewModel公开一个 ListCollectionView ,并有C#代码手动添加 PropertyGroupDescription 它告诉网格如何重新组合事物。

    我想改为使用普通XAML,如下所示:

    <controls:GroupingGrid GroupedItemSource="{DynamicResource MyViewSource}"
                           SelectedItem="{Binding MySelectedItem}"
                           ShowGroupingItemCount="True">
        <DataGrid.Resources>
            <CollectionViewSource x:Key="MyViewSource" Source="{Binding ViewModel.MyData}">
                <CollectionViewSource.GroupDescriptions>
                    <PropertyGroupDescription PropertyName="SomeProperty" 
                                              Converter="{StaticResource MyConverter}" />
                </CollectionViewSource.GroupDescriptions>
            </CollectionViewSource>
        </DataGrid.Resources>
        <DataGrid.Columns>
            <!-- column definitions -->
        </DataGrid.Columns>
    

    所以我把这个添加到我的 分组网格 控件的代码隐藏:

    public static readonly DependencyProperty GroupedItemSourceProperty =
        DependencyProperty.Register("GroupedItemSource", typeof (CollectionViewSource), typeof (GroupingGrid));
    
    public CollectionViewSource GroupedItemSource
    {
        get { return (CollectionViewSource) GetValue(GroupedItemSourceProperty); }
        set { SetValue(GroupedItemSourceProperty, value); }
    }
    

    它构建了,但我得到了一个运行时 XamlObjectWriterException 说:

    设置属性“System.Windows.ResourceDictionary”。DeferrableContent“引发异常。

    所以基本上,我不能使用 DataGrid.Resources 在“客户端xaml”中添加 CollectionViewSource.GroupDescriptions 收藏,因为我 无法重新初始化资源字典实例 .

    我唯一的希望是用C#代码定义分组,还是有一种简洁的XAML方法?

    1 回复  |  直到 10 年前
        1
  •  2
  •   Subru    10 年前

    添加 CollectionViewSource 作为的资源 Window/Usercontrol

    <Window.Resources>
        <CollectionViewSource x:Key="MyViewSource" Source="{Binding ViewModel.MyData}">
            <CollectionViewSource.GroupDescriptions>
                <PropertyGroupDescription PropertyName="SomeProperty" 
                                          Converter="{StaticResource MyConverter}" />
            </CollectionViewSource.GroupDescriptions>
        </CollectionViewSource>
    </Window.Resources>
    

    将其绑定到您的 DataGrid 如下所示

    <DataGrid ItemsSource="{Binding Source={StaticResource MyViewSource}}"
              SelectedItem="{Binding MySelectedItem}"/>
    

    希望这有帮助!!