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
值提供的模板之一?