我正在尝试尽可能多地重用我正在编写的XAML。
现在,我想在DataGrids中显示我的对象。我的物品通过传承共享一些共同的属性。因此,我想创建一个带有网格的UserControl,以及为每个对象共有的属性定义一些列。所以看起来像这样:
<UserControl Name="MyCustomGrid">
<Grid>
<DataGrid>
<!-- Common Settings -->
...
<!-- /Common Settings -->
<DataGrid.Columns>
<ADataGridColumn Name="CommonProperty1"/>
<ADataGridColumn Name="CommonProperty2"/>
...
</DataGrid.Columns>
</DataGrid>
</Grid>
</UserControl>
然后我希望能够使用此UserControl并为我想要显示的对象的特定属性添加额外列,通过XAML ,如下所示:< / p>
<view:myCustomGrid>
<view:myCustomGrid.Columns>
<ADataGridColumn Name="SpecificProperty1"/>
<ADataGridColumn Name="SpecificProperty2"/>
...
</view:myCustomGrid.Columns>
</view:myCustomGrid>
这可能吗?我查看了this问题,但似乎我无法在DataGrid.Columns下插入ContentControl
也许这不是要走的路......
感谢您的帮助
答案 0 :(得分:0)
你可以像这样定义列;包括不同类型
<DataGrid>
<DataGrid.Columns>
<DataGridTemplateColumn/>
<DataGridCheckBoxColumn/>
<DataGridComboBoxColumn/>
<DataGridHyperlinkColumn/>
<DataGridTextColumn/>
</DataGrid.Columns>
</DataGrid>
当你设置AutoGenerateColumns="True"
这是默认值时,你也会从绑定属性中获取列。如果您只想查看指定的列,则必须设置AutoGenerateColumns="False"
。
DataGridTemplateColumn
适用于特定于用户的列。所以你可以把你想要的东西放进去。
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<!--Content-->
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<!--Content-->
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
但是为什么要将其封装在UserControl
而不是为DataGrid
实例本身进行封装?我建议为每个DataGrid
指定列,因为将它放入UserControl
会有很多工作要做。或者在每个DataGrid
有一些相同的东西时使用样式。