使用DataGrid的WPF UserControl,在XAML中添加额外的列

时间:2017-07-13 13:26:25

标签: c# wpf xaml datagrid user-controls

我正在尝试尽可能多地重用我正在编写的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

也许这不是要走的路......

感谢您的帮助

1 个答案:

答案 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有一些相同的东西时使用样式。