我有绑定到一个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的属性。这就是我指的绑定。 –