miniHessel Asked: 2024-11-12 22:49:57 +0800 CST2024-11-12 22:49:57 +0800 CST 2024-11-12 22:49:57 +0800 CST 如何将事件处理程序附加到 DataGrid 组合框选择已更改 772 使用 Community ToolKit 中的 DataGrid。如何绑定事件处理程序来监听 DataGridComboBoxColumn 中的更改? xaml 1 个回答 Voted Best Answer Andrew KeepCoding 2024-11-13T05:55:13+08:002024-11-13T05:55:13+08:00 不幸的是,你不能。实现这一点的一种方法是使用带有的DataGridTemplateColumnCheckBox。 例如: * .xaml <toolkit:DataGrid.Columns> <toolkit:DataGridTemplateColumn Header="IsEnabled"> <toolkit:DataGridTemplateColumn.CellTemplate> <DataTemplate> <ComboBox Loaded="ComboBox_Loaded" SelectionChanged="ComboBox_SelectionChanged" /> </DataTemplate> </toolkit:DataGridTemplateColumn.CellTemplate> </toolkit:DataGridTemplateColumn> </toolkit:DataGrid.Columns> 然后在代码隐藏中你将拥有: * .xaml.cs private void ComboBox_Loaded(object sender, Microsoft.UI.Xaml.RoutedEventArgs e) { if (sender is not ComboBox comboBox) { return; } comboBox.ItemsSource = ComboBoxItems; comboBox.SelectedIndex = 0; } private void ComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e) { System.Diagnostics.Debug.WriteLine($"Selected item: {e.AddedItems.ToString()}"); } 更新 您还可以创建自定义DataGridComboBoxColumn: public class DataGridComboBoxColumnEx : DataGridComboBoxColumn { public event SelectionChangedEventHandler? SelectionChanged; protected override FrameworkElement GenerateEditingElement(DataGridCell cell, object dataItem) { var comboBox = (ComboBox)base.GenerateEditingElement(cell, dataItem); comboBox.SelectionChanged -= ComboBox_SelectionChanged; comboBox.SelectionChanged += ComboBox_SelectionChanged; return comboBox; } private void ComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e) { SelectionChanged?.Invoke(sender, e); } } 然后像普通方式一样使用它DataGridComboBoxColumn: <local:DataGridComboBoxColumnEx SelectionChanged="ComboBox_SelectionChanged" ItemsSource="{x:Bind ComboBoxItems}" Binding="{Binding Name, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Header="Enabled" />
不幸的是,你不能。实现这一点的一种方法是使用带有的DataGridTemplateColumn
CheckBox
。例如:
* .xaml
然后在代码隐藏中你将拥有:
* .xaml.cs
更新
您还可以创建自定义
DataGridComboBoxColumn
:然后像普通方式一样使用它
DataGridComboBoxColumn
: