我有一个绑定到DataTable的DataGrid,我称之为“GridCollection”:
<!--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列的属性(“Caption”),然后相应地更新组合框的可见性来实现此目的 .
我的理解是,在这种情况下,DataContext是DataTable的列 .
我已经尝试设置DataTable列的“Caption”属性以匹配DataTrigger(“ShowComboBox”)中指定的值:
ViewModel.GridCollection.Columns[index].Caption = "ShowComboBox";
在确认正在执行此代码行并且正在更新Caption属性之后,仍然没有对DataGrid进行任何更改 . 没有列显示组合框 .
我不确定绑定是否存在问题,或者是否是其他问题 .
任何帮助表示赞赏!
2 回答
由于
DataColumn
未实现INotifyPropertyChanged接口并将属性更改通知引发到WPF,因此无法使用 .但是,如果您向
DataTable
添加一列并绑定到此列,它将起作用:区别在于
DataRowView
类实现了INotifyPropertyChanged
接口 . 这是WPF能够侦听源属性的更改并动态更新视图所必需的 .如果更改布局,则需要重置绑定 . 从datagrid中删除绑定/数据源 . 更改 Headers 值并将源再次绑定到您的数据网格 .
这里代码对我有用:
窗口的XAML
背后的代码: