如何为数据网格组合框的选择更改设置事件?
How to set event for selectionchanged of datagrid combobox?
您好,我有一个 wpf 项目,它像这样将数据网格绑定到模块:
<DataGrid.Columns>
<DataGridTextColumn Header="Name" Binding="{Binding Name}" IsReadOnly="True"/>
<DataGridTemplateColumn Header="Values">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox ItemsSource="{Binding Values}" SelectedItem="{Binding Value, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
这很好用。现在我想添加一些功能,包括设置组合框 SelectionChanged
的事件。所以我像这样更改了 xaml
文件:
<DataGrid.Columns>
<DataGridTextColumn Header="Name" Binding="{Binding Name}" IsReadOnly="True"/>
<DataGridTemplateColumn Header="Values">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox ItemsSource="{Binding Values}" SelectedItem="{Binding Value, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">
/!-- Add an EventSetter here. -->
<Style TargetType="{x:Type ComboBox}">
<EventSetter Event="SelectionChanged" Handler="ValueChanged" />
</Style>
</ComboBox>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
并在后端添加一个函数,如下所示:
private void ValueChanged(object sender, SelectionChangedEventArgs e)
{
var comboBox = sender as ComboBox;
if (comboBox.SelectedItem != null)
{
//do something here.
}
}
但是当我更改组合框单元格时,这会使项目崩溃 error: "The Application is in break mode."
。那么可能是什么问题呢?提前致谢!
笨如我。只需在 combobox
中设置事件即可解决问题。
<DataGrid.Columns>
<DataGridTextColumn Header="Name" Binding="{Binding Name}" IsReadOnly="True"/>
<DataGridTemplateColumn Header="Values">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox ItemsSource="{Binding Values}" SelectedItem="{Binding Value, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
SelectionChanged="ValueChanged" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
您需要将 ComboBox
的 Style
属性 设置为您的 Style
:
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox ItemsSource="{Binding Values}" SelectedItem="{Binding Value, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">
<ComboBox.Style>
<Style TargetType="{x:Type ComboBox}">
<EventSetter Event="SelectionChanged" Handler="ValueChanged" />
</Style>
</ComboBox.Style>
</ComboBox>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
或者您可以直接在 ComboBox
元素上连接事件处理程序并去掉 Style
:
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox ItemsSource="{Binding Values}" SelectedItem="{Binding Value, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
SelectionChanged="ValueChanged" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
您好,我有一个 wpf 项目,它像这样将数据网格绑定到模块:
<DataGrid.Columns>
<DataGridTextColumn Header="Name" Binding="{Binding Name}" IsReadOnly="True"/>
<DataGridTemplateColumn Header="Values">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox ItemsSource="{Binding Values}" SelectedItem="{Binding Value, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
这很好用。现在我想添加一些功能,包括设置组合框 SelectionChanged
的事件。所以我像这样更改了 xaml
文件:
<DataGrid.Columns>
<DataGridTextColumn Header="Name" Binding="{Binding Name}" IsReadOnly="True"/>
<DataGridTemplateColumn Header="Values">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox ItemsSource="{Binding Values}" SelectedItem="{Binding Value, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">
/!-- Add an EventSetter here. -->
<Style TargetType="{x:Type ComboBox}">
<EventSetter Event="SelectionChanged" Handler="ValueChanged" />
</Style>
</ComboBox>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
并在后端添加一个函数,如下所示:
private void ValueChanged(object sender, SelectionChangedEventArgs e)
{
var comboBox = sender as ComboBox;
if (comboBox.SelectedItem != null)
{
//do something here.
}
}
但是当我更改组合框单元格时,这会使项目崩溃 error: "The Application is in break mode."
。那么可能是什么问题呢?提前致谢!
笨如我。只需在 combobox
中设置事件即可解决问题。
<DataGrid.Columns>
<DataGridTextColumn Header="Name" Binding="{Binding Name}" IsReadOnly="True"/>
<DataGridTemplateColumn Header="Values">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox ItemsSource="{Binding Values}" SelectedItem="{Binding Value, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
SelectionChanged="ValueChanged" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
您需要将 ComboBox
的 Style
属性 设置为您的 Style
:
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox ItemsSource="{Binding Values}" SelectedItem="{Binding Value, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">
<ComboBox.Style>
<Style TargetType="{x:Type ComboBox}">
<EventSetter Event="SelectionChanged" Handler="ValueChanged" />
</Style>
</ComboBox.Style>
</ComboBox>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
或者您可以直接在 ComboBox
元素上连接事件处理程序并去掉 Style
:
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox ItemsSource="{Binding Values}" SelectedItem="{Binding Value, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
SelectionChanged="ValueChanged" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>