【问题标题】:Binding programmatically generated DataGridTextColumn's Visibility property to a checkbox将以编程方式生成的 DataGridTextColumn 的 Visibility 属性绑定到复选框
【发布时间】: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


【解决方案1】:

我以另一种方式工作 -> 试试这个,其中列列表用于生成复选框,然后切换可见性..

<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>

【讨论】:

    猜你喜欢
    • 2011-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-12
    • 2012-11-13
    • 2013-10-04
    相关资源
    最近更新 更多