10

我有一个带有组合框列的数据网格

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

我想要一个仅在用户将值更改为组合框时触发的事件。我该如何解决这个问题?

4

3 回答 3

16

我在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;

}
于 2014-01-20T15:25:25.263 回答
5

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

var style = new Style(typeof(ComboBox));
style.Setters.Add(new EventSetter(ComboBox.SelectionChangedEvent, new SelectionChangedEventHandler(SomeSelectionChanged)));
dataGridComboBoxColumn.EditingElementStyle = style;
于 2016-08-12T08:54:07.517 回答
3

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

1)第一次触发:当你选择一个新项目时

2)第二个触发器:当您在选择一个新项目后单击另一个数据网格列时

问题是在第二次触发时,ComboBox 值为 null,因为您没有更改所选项目。

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

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

于 2016-02-29T17:18:03.257 回答