C# WPF datagrid combobox列:如何管理选择更改的事件?

C# WPF datagrid combobox列:如何管理选择更改的事件?,c#,wpf,datagrid,combobox,C#,Wpf,Datagrid,Combobox,我有一个datagrid,有一个combobox列 <DataGridComboBoxColumn x:Name="DataGridComboBoxColumnBracketType" Width="70" Header="Tipo di staffa" SelectedValueBinding="{Binding type, UpdateSourceTrigger=PropertyChanged}"> </Dat

我有一个datagrid,有一个combobox列

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

我想要一个只有当用户将值更改为combobox时才会触发的事件。
如何解决此问题?

我在上找到了解决此问题的方法。在这里,经过一些修改:

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

要完成Kevinpo回答,对于隐藏的代码,您应该添加一些保护,因为selectionChanged事件使用datagridcolumncombobox触发了2次:

1) 第一个触发器:选择新项目时

2) 第二个触发器:选择新项后单击其他datagridcolumn时

问题是在第二次触发时,组合框 值为null,因为您尚未更改所选项目

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

那是我的问题,我希望它能帮助别人

和CodePlex的@kevinpo提供的xaml代码,以及来自的帮助,以编程方式:


您需要将其更改回以前使用选择器时的状态。选择并使用网格。为了访问ComboBoxItem,我相信您必须深入到ComboxBox本身。有什么问题吗?只是处理程序没有被调用吗?我想知道范围——可能样式必须在根资源字典中定义。为什么您不能在viewmodel中订阅
type
上的
PropertyChanged
?@Maverik您的意思是我需要将此问题管理到type属性集中?这不适用于DropDownClosed之类的路由事件
private void SomeSelectionChanged(object sender, SelectionChangedEventArgs e)
{
    var comboBox = sender as ComboBox;
    if (comboBox.SelectedItem != null)
    {
        YOUR CODE HERE
    }
}
var style = new Style(typeof(ComboBox));
style.Setters.Add(new EventSetter(ComboBox.SelectionChangedEvent, new SelectionChangedEventHandler(SomeSelectionChanged)));
dataGridComboBoxColumn.EditingElementStyle = style;