WPF DataGrid:滚动导致控件事件被调用
本文关键字:控件 事件 调用 DataGrid 滚动 WPF | 更新日期: 2023-09-27 18:12:17
我目前在c#应用程序中使用WPF Datagrid,其中每行包含一个CheckBox,一个ComboBox和一个TextBox。然后,为CheckBox注册一个方法。选中复选框。未选中和组合框。SelectionChanged事件。启用扩展选择后,我想将控件的更改反映到所有选定的行(例如,如果复选框未选中,则应为每个选定的行)。
当使用控件并且一切正常工作时,按预期调用该方法。我的问题是,当我调用DataGrid时也会调用该事件,这给我带来了一些麻烦。我对此的第一个想法是,一些行是虚拟化的,事件在加载时被调用,但我不确定如何验证这一点。
我想要的是简单地忽略这些事件,我使用eventArg来确定所做的更改并将其反映在选定的单元格上。但是当滚动时,这会导致一些随机行为…
可以在加载时调用事件的虚拟行吗?我能检测到这种行为并忽略这些事件吗?
下面是我的DataGrid定义:<DataGrid AutoGenerateColumns="False" Height="364" HorizontalAlignment="Left" Margin="6,40,0,0" Name="dataGrid" VerticalAlignment="Top" Width="628" CanUserResizeColumns="True" SelectionMode="Extended" CanUserResizeRows="False" CanUserReorderColumns="False" CanUserAddRows="False">
<DataGrid.Columns>
<DataGridTemplateColumn Header="Column 1">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<CheckBox Name="dataGrid_checkBox" IsChecked="false" Checked="OnDataGridEvent" Unchecked="OnDataGridEvent" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="Column 2">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox Name="dataGrid_comboBox" SelectionChanged="OnDataGridEvent">
<ComboBoxItem Content="1" IsSelected="True" />
<ComboBoxItem Content="2" />
<ComboBoxItem Content="3" />
<ComboBoxItem Content="4" />
</ComboBox>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
谢谢你的帮助
不要使用ComboBoxItem
绑定到List
不要使用SelectionChanged事件-只使用set
struct NameBool
{
private string name;
private bool selected;
public string Name
{
get { return name; }
set
{
if (name == value) return;
name = value;
}
}
public bool Selected
{
get { return selected; }
set
{
if (selected == value) return; // this is to ignore a no change
selected = value;
}
}
public NameBool(string Name, bool Selected) { name = Name; selected = Selected;}
}