C# WPF datagrid combobox列:如何管理选择更改的事件?
我有一个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
<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;