簡體   English   中英

如何在XAML中為自定義DataGrid控件指定GroupDescriptions?

[英]How to specify GroupDescriptions in XAML for a custom DataGrid control?

我有一個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>

所以我把它添加到我的GroupingGrid控件的代碼隱藏中:

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'引發了異常。

所以基本上,我不能在“client xaml”中使用DataGrid.Resources來添加像CollectionViewSource.GroupDescriptions集合這樣的東西,因為我無法重新初始化資源字典實例

我唯一希望用C#代碼定義分組,還是有一個簡潔的XAML方式?

添加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}"/>

希望這可以幫助!!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM