将模板应用于datagrid列

时间:2014-06-03 11:38:52

标签: c# visual-studio-2010 mvvm

我使用MVVM并且我想将模板应用于我的数据网格的特定列。

我创建了具有名称,成本,属性的Machine类。

我还创建了具有Name porperty,ExecutiveMachine属性(Type:Machine)的Operation Class 当我使用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。我尝试了但是当我这样做时,我的所有列都有两次,如果我删除了ItemsSource的{​​{1}}属性,我只有一次但三列变空。 如果我的想法很好,我怎么能绑定这个DataGrid

1 个答案:

答案 0 :(得分:2)

如果您想手动添加列,则需要关闭DataGrid

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

修改

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

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