2013-03-25 3 views
4

Я пытаюсь связать свойство видимости DataGridTextColumn со значением IsChecked в поле со списком (cbIP). Для большинства колонн, я решил проблему в XAML с линиями, как это:Связывание программно сгенерированного свойства видимости DataGridTextColumn с флажком

<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 сгенерированных столбцов

Что делать неправильно

Заранее спасибо

+0

Кажется, я нашел решение сам Это сделал трюк:. b.Path = новый PropertyPath (CheckBox.IsCheckedProperty); – SamiHuutoniemi

ответ

0

Я работаю по-другому -.?!> Попробуйте это где список столбцов используются для создания флажки, а затем переключить visiblity ..

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

Смежные вопросы