将程序生成的DataGridTextColumn's Visibility属性绑定到复选框
本文关键字:属性 Visibility 绑定 复选框 程序生成 DataGridTextColumn | 更新日期: 2023-09-27 18:05:43
我试图将DataGridTextColumn的可见性属性绑定到组合框(cbIP)的IsChecked值。对于大多数专栏,我已经用这样的行解决了XAML中的问题:
<DataGridTextColumn Header="Time" Binding="{Binding MeasureTime}" Visibility="{Binding Source={x:Reference cbMeasureTime}, Path=IsChecked, Converter={StaticResource BoolToVisConverter}}"></DataGridTextColumn>
但是,有些列考虑基于不同长度的数组的值(因此列数也不同)。这是我在后面的代码中创建的没有问题。唯一的问题是可见性属性。我已经走了这么远:
private void Page_Loaded_1(object sender, RoutedEventArgs e)
{
for (int i = 0; i < ds.NumberOfIPValues; i++)
{
DataGridTextColumn col = new DataGridTextColumn() { Header = String.Format("IP #{0} (mV/V)", i + 1) };
col.Binding = new Binding(String.Format("IP[{0}]",i));
Binding b = new Binding("Visibility");
b.Source = cbIP;
b.Path = new PropertyPath(typeof(CheckBox).GetProperty("IsChecked"));
b.Converter = new BoolToVisibilityConverter();
BindingOperations.SetBinding(col, DataGridTextColumn.VisibilityProperty, b);
ViewInTableDataGrid.Columns.Add(col);
}
}
不用说,它不起作用。我看到了列,但是复选框不起作用。(它适用于xml生成的列。
我做错了什么?
提前感谢!
我以另一种方式工作->试试这个,其中列列表用于生成复选框,然后切换可见性…
<ItemsControl ItemsSource="{Binding Path=Columns, ElementName=dgSearchResult, NotifyOnTargetUpdated=True, NotifyOnSourceUpdated=True}" >
<ItemsControl.ItemTemplate>
<DataTemplate >
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="5"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<CheckBox Content="{Binding Path=Header}" IsChecked="{Binding Path=Visibility, NotifyOnTargetUpdated=True, NotifyOnSourceUpdated=True, Mode=TwoWay, Converter={StaticResource BooleanToHiddenConvertor}}" />
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>