2012-05-24 1 views
0

У меня есть DataGrid, связанный с ObservableCollection. Я динамически добавляю столбцы. Cols struc - это первый столбец TextBlock, остальные - кнопки. У меня есть некоторые проблемы с кнопками:CommandProperty к столбцу кнопки, добавленному динамически в DataGrid, не работает

Я хочу установить команду для этого col, вызывая функцию OpenTORWindow с двумя параметрами (String, String). Я не могу понять, как это установить. Код для добавления COLS как:

FrameworkElementFactory buttonTemplate = null; 
for (int i = 0; i < GlobalUtils.TOR_List.Count; i++) 
{     
    buttonTemplate = new FrameworkElementFactory(typeof(Button));     
    switch (i) { 
     case 0: 
      buttonTemplate.SetBinding(Button.ContentProperty, 
             new Binding("CLVButtonText")); 
      break; 
     case 1: 
      buttonTemplate.SetBinding(Button.ContentProperty, 
             new Binding("MKBLButtonText")); 
      break; 
    } 
    buttonTemplate.SetBinding(Button.CommandProperty, new Binding("MyCommand")); 

    RoutedEventHandler handler = new RoutedEventHandler(OpenNewWindow); 
    buttonTemplate.AddHandler(Button.ClickEvent, handler, true); 
    this.seivesTorGrid.Columns.Add(new DataGridTemplateColumn() 
    { 
     Header = GlobalUtils.TOR_List[i].TOR_Id, 
     CellTemplate = new DataTemplate() { VisualTree = buttonTemplate } 
    });     
} 

поручаю МояКоманда с:

MyCommand = new RelayCommand(param => this.OpenWindow(s.SeiveIdSize))

Но МояКоманда никогда не срабатывает. Затем я добавил AddHandler, это работает. Любая идея, почему CommandProperty не работает.

ответ

1

Кнопка, которую вы добавляете, разделяет DataContext из текущей строки в DataGrid, поэтому, когда вы вызываете «MyCommand», WPF выполняет поиск объекта в TOR_List и, как его, вероятно, не существует, он не будет выполняться. Вы можете проверить окна вывода, чтобы проверить наличие ошибок привязки.

Для достижения того, что вы хотите, вам нужно создать команду в объекте, из которого TOR_List является списком или использовать RelativeSource.

+0

@Deigo, спасибо. Ну, это выглядело в правильном источнике, но я упомянул только публичную MyCommand и не делал это как свойство get; & set;. Следовательно, он не смог его найти. Я добавил его как свойство, и все стало хорошо работать. – Tvd