如何在 XAML 中为自定义数据网格控件指定组说明
本文关键字:控件 网格 说明 数据网 数据 XAML 自定义 | 更新日期: 2023-09-27 18:34:31
我有一个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"引发了异常。
所以基本上,我不能在"客户端 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}"/>
希望这有帮助!!