2013-11-18 3 views
1

Я пытаюсь связать элементы управления различными DataGridTemplateColumns. Здесь идет пример:WPF DataGrid - связывание элементов управления разных DataGridTemplateColumn

 DataGridTemplateColumn col1 = new DataGridTemplateColumn(); 
     col1.Header = "Source"; 
     FrameworkElementFactory factory1 = new FrameworkElementFactory(typeof(CheckBox)); 
     Binding b1 = new Binding("."); 
     factory1.SetValue(CheckBox.IsCheckedProperty, b1); 
     DataTemplate cellTemplate1 = new DataTemplate(); 
     cellTemplate1.VisualTree = factory1; 
     col1.CellTemplate = cellTemplate1; 
     dataGrid1.Columns.Add(col1); 

     DataGridTemplateColumn col2 = new DataGridTemplateColumn(); 
     col2.Header = "Binded to Source"; 
     FrameworkElementFactory factory2 = new FrameworkElementFactory(typeof(TextBox)); 
     Binding b2 = new Binding("What goes here?"); 
     factory2.SetValue(TextBox.IsEnabledProperty, b2); //Enable TextBox if CheckBox of col1 is checked 
     DataTemplate cellTemplate2 = new DataTemplate(); 
     cellTemplate2.VisualTree = factory2; 
     col2.CellTemplate = cellTemplate2; 
     dataGrid1.Columns.Add(col2); 

     dataGrid1.ItemsSource = new bool[] { true, false }; 

Я хочу, чтобы связать свойство одного элемента управления (CheckBox в данном примере) к свойству другого элемента управления в различных DataGridTemplateColumn. Возможно ли это? Это привязка строго соответствует пользовательскому интерфейсу и не отражается в модели представления.

+0

Для чего привязывается b1? – Natxo

+0

b1 связывает свойство CheckCheck IsChecked контрольной группы col1 с моделью (массив bools в этом примере). Это прекрасно работает. Проблема связана с привязкой b2 - как связать с контролем другого столбца вместо модели? –

ответ

1

WPF Datagrid объектно ориентирован, поэтому привязка между элементами управления ячейками в строках не является естественным способом делать что-то. Как вы говорите, ваша привязка b1 для Checkbox использует свойство в модели, поэтому я предлагаю вам привязать IsEnabled от Textbox (b2) к тому же свойству.

В любом случае, если вы настаиваете на том, по-другому, ваш b2 связывания следует использовать FindAncestor, чтобы получить DataGridRow, в котором содержится, а затем выкопать в DataGridRow.ItemsPanel найти флажок. Это будет непросто, и для меня это взломать.

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