我可以在 Xaml 中指定 DataGrid 项目的类型吗?

Jac*_*ope 7 wpf resharper xaml

在 Xaml 中创建数据模板时,我可以指定 DataTemplate 将应用于的项目类型,如下所示:

<DataTemplate DataType="{x:Type Vehicle}">
  <!-- do some stuff with the Vehicle class's properties -->
</DataTemplate>
Run Code Online (Sandbox Code Playgroud)

我希望在创建 DataGrid 时能够做同样的事情,但它不是 DataType 属性的选项:

<DataGrid ItemsSource="{Binding Cars}" DataType="{x:Type Vehicle}">
     <!-- Create columns that bind to the Vehicle class's properties -->
</DataGrid>
Run Code Online (Sandbox Code Playgroud)

一个相当糟糕的解决方法是分别在每一列上执行此操作:

<DataGrid ItemsSource="{Binding Cars}" DataType="{x:Type Vehicle}">
  <DataGrid.Columns>
    <DataGridTemplateColumn>
      <DataGridTemplateColumn.Header />
      <DataGridTemplateColumn.CellTemplate>
        <DataTemplate DataType="{x:Type Vehicle}">
          <!-- bind to a Vehicle class property -->
        </DataTemplate>
      </DataGridTemplateColumn.CellTemplate>
    </DataGridTemplateColumn>
    <DataGridTemplateColumn>
      <DataGridTemplateColumn.Header />
      <DataGridTemplateColumn.CellTemplate>
        <DataTemplate DataType="{x:Type Vehicle}">
          <!-- bind to a Vehicle class property -->
        </DataTemplate>
      </DataGridTemplateColumn.CellTemplate>
    </DataGridTemplateColumn>
    <DataGridTemplateColumn>
      <DataGridTemplateColumn.Header />
      <DataGridTemplateColumn.CellTemplate>
        <DataTemplate DataType="{x:Type Vehicle}">
          <!-- bind to a Vehicle class property -->
        </DataTemplate>
      </DataGridTemplateColumn.CellTemplate>
    </DataGridTemplateColumn>
  </DataGrid.Columns>
</DataGrid>
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来做到这一点我不知道?如果我不这样做,ReSharper 的各种部分就不能很好地应对。

Dzm*_*voi 1

尝试这个:

<DataGrid ItemsSource="{Binding Cars}"
          d:DesignSource="{d:DesignInstance Type={x:Type Vehicle}, CreateList=True}">
     <!-- Create columns that bind to the Vehicle class's properties -->
</DataGrid>
Run Code Online (Sandbox Code Playgroud)

  • 没有任何其他方法可以怀疑您上面描述的重新磨刀问题。您应该将 DataType 添加到每一列。 (2认同)