【问题标题】:apply a template to a column of datagrid将模板应用于数据网格的列
【发布时间】:2014-06-03 19:56:43
【问题描述】:

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

我创建了具有名称、成本、属性的机器类。

我还创建了具有名称属性、ExecutiveMachine 属性的操作类(类型:机器) 当我使用 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

【问题讨论】:

  • 手动插入列并将DataGrid.AutoGenerateColumns设置为False

标签: c# visual-studio-2010 mvvm


【解决方案1】:

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

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

编辑

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

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

【讨论】:

  • 谢谢,它可以工作.... 但是现在,当我单击列标题时,如何按名称对元素进行排序?我添加了CanUserSort="True" 但这不起作用
  • 它停止在所有列上工作还是只在这一列上工作?
  • 我只能调整宽度...当我点击标题时,所有手动添加的列都无法排序。但是,autoGenerateColums 可以点击排序
  • 您是对所有手动添加的列使用DataGridTemplateColumn,还是同时使用DataGridTextColumn 和/或DataGridCheckBoxColumn,因为它们应该为DataGridTemplateColumn 自动排序,检查我的编辑
  • 我正在使用DataGridTemplateColumn...&lt;DataGridTemplateColumn Header="Machine" CanUserSort="True"&gt; &lt;DataGridTemplateColumn.CellTemplate&gt; &lt;DataTemplate&gt; &lt;Label Content="{Binding Path=ExecutiveMachine.Name}"/&gt; &lt;/DataTemplate&gt; &lt;/DataGridTemplateColumn.CellTemplate&gt; &lt;/DataGridTemplateColumn&gt;
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-01-24
  • 1970-01-01
  • 1970-01-01
  • 2021-02-06
  • 2012-05-27
  • 1970-01-01
  • 2015-08-29
相关资源
最近更新 更多