我想实现以下目标:
每个TabItem的内容应该是一个xceed DataGrid控件,显示所选选项卡的Items集合的内容。
<TabControl ItemsSource="{Binding Categories}">
<TabControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding CategoryName}" />
</DataTemplate>
</TabControl.ItemTemplate>
<TabControl.ContentTemplate>
<DataTemplate>
<xcdg:DataGridControl
ItemsSource="{Binding Items}"
AutoCreateColumns="True">
</xcdg:DataGridControl>
</DataTemplate>
</TabControl.ContentTemplate>
</TabControl>
当我直接绑定到DataGridControl的ItemsSource属性时,这可以正常工作。但是,为了利用DataGridControl的所有功能,我需要将DataGridControl的ItemsSource属性绑定到绑定到Items集合的DataGridCollectionViewSource对象。我通过在UserControl的Resources部分中创建一个DataGridCollectionViewSource对象并绑定到另一个控件中来实现此目的。
<UserControl>
<UserControl.Resources>
<xcdg:DataGridCollectionViewSource x:Key="GridData"
Source="{Binding Items}" />
</UserControl.Resources>
<Grid>
<xcdg:DataGridControl
ItemsSource="{Binding Source={StaticResource GridData}}"
AutoCreateColumns="True">
</xcdg:DataGridControl>
</Grid>
</UserControl>
如何构建XAML,以便在绑定TabControl时,为每个TabItem创建一个DataGridCollectionViewSource对象,以便在TabItem的内容中生成的DataGridControl可以绑定到它?
清楚如泥,对吗? :)
谢谢!
*在真正的解决方案中,集合包含比简单字符串更复杂的类的对象,但是使用字符串使示例更简单。
答案 0 :(得分:0)
好的,这是一个长镜头,但你可以使用DataGrid.Tag ......
<TabControl.ContentTemplate>
<DataTemplate>
<xcdg:DataGridControl
ItemsSource="{Binding RelativeSource={RelativeSource Self}, Path=Tag}"
AutoCreateColumns="True">
<xcdg:DataGridControl.Tag>
<xcdg:DataGridCollectionViewSource x:Key="GridData"
Source="{Binding Items}" />
</xcdg:DataGridControl.Tag>
</xcdg:DataGridControl>
</DataTemplate>
</TabControl.ContentTemplate>
或者......可以在任何FrameworkElement上定义资源,因此您可以尝试:
<TabControl.ContentTemplate>
<DataTemplate>
<xcdg:DataGridControl
ItemsSource="{Binding Source={StaticResource GridData}}"
AutoCreateColumns="True">
<xcdg:DataGridControl.Resources>
<xcdg:DataGridCollectionViewSource x:Key="GridData"
Source="{Binding Items}" />
</xcdg:DataGridControl.Resources>
</xcdg:DataGridControl>
</DataTemplate>
</TabControl.ContentTemplate>
我没有使用eXceed Grid因此无法测试这些是否有效 - 只需要尝试几个想法!
Colin E。
答案 1 :(得分:0)
您可以在资源上使用x:Shared="True"
属性。这意味着为每次使用该资源创建一个新实例。
<UserControl.Resources>
<xcdg:DataGridCollectionViewSource x:Key="GridData"
x:Shared="False"
Source="{Binding Items}" />
</UserControl.Resources>