将模板应用于数据网格的列

本文关键字:网格 数据网 数据 应用于 | 更新日期: 2023-09-27 18:06:30

我使用MVVM,我想将模板应用到我的数据网格的特定列。

我创建了Machine类,它有Name, cost, properties.

我还创建了一个操作类,它有Name属性,ExecutiveMachine属性(Type: Machine)当我使用itemsSource来显示我的操作列表时,我看到了我的机器的路径,而我想显示它们的名称。我添加了DataGridTemplateColumn,但现在,我有机器列两次(一个正确,另一个不正确)

实际上我的代码是:

<DataGrid ItemsSource="{Binding Path=Operations}" Name="datagridOperation" Width="Auto" Height="Auto" Margin="10" HorizontalContentAlignment="Center" SelectionMode="Single" MinColumnWidth="80" CanUserAddRows="False" CanUserDeleteRows="False" RowBackground="DimGray" AlternatingRowBackground="#FF3E3E3E" AlternationCount="1" IsReadOnly="True" SelectionChanged="UpdateOperationComboBox">
    <DataGrid.Columns>
        <DataGridTemplateColumn Header="Machine" CanUserSort="True">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <Label Content="{Binding Path=ExecutiveMachine.Name}"/>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
    </DataGrid.Columns>
  </DataGrid>

我的第一个想法是手动添加DataGridColumns。我试过了,但是当我这样做的时候,我有两列,如果我删除我的DataGridItemsSource属性,我只有一次,但三列变成空的。如果我的想法是好的,我如何绑定这个ItemsSource ?

将模板应用于数据网格的列

如果你想手动添加列,那么你需要关闭AutoGenerateColumnsDataGrid

<DataGrid 
    ItemsSource="{Binding Path=Operations}" 
    Name="datagridOperation"
    ...
    AutoGenerateColumns="False">

编辑

要手动定义任何DataGridColumn的排序路径,可以指定DataGridColumn.SortMemberPath

<DataGridTemplateColumn Header="Machine" CanUserSort="True" SortMemberPath="SortPropertyName">