我有一个带有组合框列的数据网格
<DataGridComboBoxColumn x:Name="DataGridComboBoxColumnBracketType" Width="70" Header="Tipo di staffa" SelectedValueBinding="{Binding type, UpdateSourceTrigger=PropertyChanged}">
</DataGridComboBoxColumn>
我想要一个仅在用户将值更改为组合框时触发的事件。 我该如何解决这个问题?
答案 0 :(得分: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 :(得分:3)
来自CodePlex的@kevinpo提供的xaml代码以及来自David Mohundro's blog的帮助,以编程方式提供:
var style = new Style(typeof(ComboBox));
style.Setters.Add(new EventSetter(ComboBox.SelectionChangedEvent, new SelectionChangedEventHandler(SomeSelectionChanged)));
dataGridComboBoxColumn.EditingElementStyle = style;
答案 2 :(得分:2)
要完成Kevinpo的回答,对于你背后的代码,你应该添加一些保护因为使用datagridcolumncombobox触发了selectionChanged事件2次:
1)第一次触发:当你选择一个新项目时
2)第二次触发:在您选择新项目后单击其他数据网格
问题是在第二次触发ComboBox时 值为null,因为您没有更改所选项目。private void SomeSelectionChanged(object sender, SelectionChangedEventArgs e)
{
var comboBox = sender as ComboBox;
if (comboBox.SelectedItem != null)
{
YOUR CODE HERE
}
}
这是我的问题,我希望它会帮助别人!