2015-03-19 34 views
0

我正忙于一个基本功能,其中向用户提供包含数据库内表的ListBox。在ListBox的右侧是DataGrid,它在表格中显示字段。这意味着每次选择另一个表格时列都会更改,并且是我的问题所在。我知道自动列生成功能,但因为我想提供我自己的列名,我需要手动执行它。我已经阅读了有关在自动列生成处于活动状态时可以处理更改名称的事件,但由于我正在使用MVVM,因此我希望避免使用文件后面的代码进行事件处理。 我的想法是创建一对模板,然后在DataGrid内部使用触发器来选择正确的列布局。这是我目前所拥有的。 模板:如何获取DataGrid模板并根据需要进行更改

<UserControl.Resources> 
    <DataTemplate x:Key="template_measurement"> 
     <DataGrid> 
      <DataGrid.Columns> 
       <DataGridTextColumn Header="ID" Binding="{Binding id}"/> 
       <DataGridTextColumn Header="Name" Binding="{Binding name}"/> 
       <DataGridTextColumn Header="Latitude" Binding="{Binding source_latitude}"/> 
       <DataGridTextColumn Header="Longitude" Binding="{Binding source_longitude}"/> 
      </DataGrid.Columns> 
     </DataGrid> 
    </DataTemplate> 

    <DataTemplate x:Key="template_realestate"> 
     <DataGrid> 
      <DataGrid.Columns> 
       <DataGridTextColumn Header="ID" Binding="{Binding id}"/> 
       <DataGridTextColumn Header="Name" Binding="{Binding name}"/> 
      </DataGrid.Columns> 
     </DataGrid> 
    </DataTemplate> 
</UserControl.Resources> 

DataGrid

<DataGrid AutoGenerateColumns="False" 
      Name="grdData" 
      HorizontalAlignment="Left" 
      Margin="10,10,0,0" 
      Grid.Row="2" 
      VerticalAlignment="Top" 
      Height="200" 
      Width="500" 
      ItemsSource="{Binding Path=SelectedTable}"> 

     <DataGrid.Triggers> 
      <Trigger Property="{Binding Path=SelectedTableName}" Value="measurement"> 
       <Setter Property="DataGrid" Value="{StaticResource template_measurement}"/> 
      </Trigger> 
     </DataGrid.Triggers> 

</DataGrid> 

以上不工作,我怀疑这可能是严重的错误,但希望表明什么,我试图实现。 SelectedTableName属性是一个字符串,其中包含当前所选表的名称。

如何让DataGrid使用我根据SelectedTableName值提供的模板之一?

回答

1

嗯,我觉得你的做法有一半是正确的一半不,

,而不是havind数据模板,然后将其设置为网格,你可以有ContentControl中,然后像你想现在设置它的内容模板。

相关问题