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

时间:2012-12-14 11:40:12

标签: wpf xaml resharper

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

<DataTemplate DataType="{x:Type Vehicle}">
  <!-- do some stuff with the Vehicle class's properties -->
</DataTemplate>

我希望能够在创建DataGrid时执行相同的操作,但它不是DataType属性的选项:

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

一个相当废话的解决方法是在每个列上单独执行:

<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>

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

2 个答案:

答案 0 :(得分:0)

试试这个:

<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>

答案 1 :(得分:0)

您可以为设计指定数据上下文。

这有效:

<DataGrid ItemsSource="{Binding Cars}" d:DataContext="{d:DesignInstance Type=Vehicle}">
    <!-- Create columns that bind to the Vehicle class's properties -->
    <!-- The pop-up window will not suggest using the Vehicle class's properties :) -->
</DataGrid>