我有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方式?
答案 0 :(得分:2)
将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}"/>
希望这会有所帮助!!