2015-03-19 83 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中,然後像你想現在設置它的內容模板。

相關問題