我有綁定到一個DataTable一個DataGrid,我已經叫「GridCollection」:通過動態DataGrid列設置爲組合框列中的數據綁定
<!--DataGrid-->
<DataGrid Name="DataGrid" ItemsSource="{Binding GridCollection}" >
<DataGrid.Columns>
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<StackPanel>
<ComboBox ItemsSource="{Binding SelectionOptions}">
<ComboBox.Style>
<Style TargetType="ComboBox">
<Setter Property="Visibility" Value="Collapsed"/>
<Style.Triggers>
<DataTrigger Binding="{Binding Caption, Mode=TwoWay}" Value="ShowComboBox">
<Setter Property="Visibility" Value="Visible"/>
</DataTrigger>
</Style.Triggers>
</Style>
</ComboBox.Style>
</ComboBox>
</StackPanel>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
我希望能夠動態地更新DataGrid列單元格顯示組合框的模板。
我試圖通過添加DataTrigger綁定到DataTable列的屬性(「標題」),然後更新相應的組合框的可見性來實現此目的。
我的理解是DataContext在這種情況下是DataTable的列。
我試圖設置DataTable的列以匹配DataTrigger(「ShowComboBox」)speicified的值的「標題」屬性:
ViewModel.GridCollection.Columns[index].Caption = "ShowComboBox";
確認正在執行這行代碼,並且後Caption屬性正在更新,這仍然不會更改DataGrid。沒有列顯示組合框。
我不確定綁定是否存在問題,或者是否是別的。
任何幫助表示讚賞!
謝謝。我假定DataColumn實現INotifyPropertyChanged,因爲DataGrid的其餘部分正在更新。好像DataTable至少實現了它......我遇到的問題是列名是從文件中讀取的,並且無法知道哪些列需要在組合框列之前運行。有什麼辦法可以在不知道列名或索引的情況下在XAML中編寫此綁定? –
你指的是爲什麼綁定?哪部分是動態的?難道你不能像我在我的回答中所建議的那樣動態添加Caption列嗎? – mm8
列標題是動態的(實際上,整個表是從文件讀入的)。我的代碼中的「Caption」是單個DataColumn的屬性,而不是Column的標題名稱。我需要綁定到DataColumn的屬性。這就是我指的綁定。 –