2013-10-11 3 views
7

У меня есть DataGrid, с колонкой поля со спискомWPF datagrid столбец combobox: как изменить событие выбора?

<DataGridComboBoxColumn x:Name="DataGridComboBoxColumnBracketType" Width="70" Header="Tipo di staffa" SelectedValueBinding="{Binding type, UpdateSourceTrigger=PropertyChanged}">      
      </DataGridComboBoxColumn> 

Я хочу событие, запускаемое только тогда, когда пользователь изменяет значение в ComboBox. Как я могу это решить?

+0

Вы должны изменить его обратно, как ранее было это с Selector.Selected и с помощью сетки. Чтобы получить доступ к ComboBoxItem, я считаю, что вам придется перебираться в ComboBox. – JLott

+0

В чем проблема? Это просто, что обработчик не вызван? Меня интересует область действия - возможно, стиль должен быть определен в корневом ресурсном словаре. – McGarnagle

+0

Почему вы не можете просто подписаться на 'PropertyChanged' на' type' в viewmodel ?? – Maverik

ответ

13

Я нашел решение этого вопроса на CodePlex. Здесь, с некоторыми изменениями:

<DataGridComboBoxColumn x:Name="Whatever">      
    <DataGridComboBoxColumn.EditingElementStyle> 
      <Style TargetType="{x:Type ComboBox}"> 
       <EventSetter Event="SelectionChanged" Handler="SomeSelectionChanged" /> 
      </Style> 
    </DataGridComboBoxColumn.EditingElementStyle>   
</DataGridComboBoxColumn> 

и в коде-за:

private void SomeSelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
    var comboBox = sender as ComboBox; 
    var selectedItem = this.GridName.CurrentItem; 

} 
+1

Спасибо большое, работал точно так, как предполагалось. – d347hm4n

+0

Спасибо большое, отлично работал –

2

Чтобы завершить Kevinpo ответ, для кода позади вы должны добавить некоторую защиту, поскольку событие SelectionChanged срабатывает 2 время с datagridcolumncombobox:

1) первый триггер: когда вы выбрали новый элемент

2) Второй триггер: при нажатии на другой datagridc olumn после того, как вы выбрали новый элемент

Проблема в том, что на втором триггере значение ComboBox равно null, поскольку вы не изменили выбранный элемент.

private void SomeSelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
    var comboBox = sender as ComboBox; 
    if (comboBox.SelectedItem != null) 
    { 
     YOUR CODE HERE 
    } 
} 

Это была моя проблема, я хочу, чтобы это помогло кому-то еще!

3

И XAML код, предоставляемый @kevinpo из CodePlex и помощь от David Mohundro's blog, программно:

var style = new Style(typeof(ComboBox)); 
style.Setters.Add(new EventSetter(ComboBox.SelectionChangedEvent, new SelectionChangedEventHandler(SomeSelectionChanged))); 
dataGridComboBoxColumn.EditingElementStyle = style; 
Смежные вопросы