【发布时间】:2013-03-14 09:39:12
【问题描述】:
我正在尝试将 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);
}
}
不用说,它不起作用。我看到了列,但复选框不起作用。 (它适用于 XAML 生成的列。
我做错了什么?
提前致谢!
【问题讨论】:
-
看来我自己找到了解决方案。这成功了:b.Path = new PropertyPath(CheckBox.IsCheckedProperty);
标签: c# wpf binding datagrid visibility