我想处理 WPF DataGrid 元素中的 SelectionChanged 事件,仅用于用户交互/选择,如果是由于绑定或其他设置值而跳过。知道如何确定用户交互是否更改了选择吗?或者任何可以完成类似任务的替代事件?
问问题
4493 次
3 回答
15
也许尝试将SelectionChanged
事件与PreviewMouseDown
事件结合起来。当用户单击一行时,您设置了一些属性并在 SelectionChanged
事件处理程序中检查该属性是否已更改。
示例代码 XAML:
<DataGrid SelectionChanged="OnSelectionChanged" PreviewMouseDown="OnPreviewMouseDown">
<!--some code-->
</DataGrid>
后面的代码:
bool isUserInteraction;
private void OnSelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (isUserInteraction)
{
//some code
isUserInteraction = false;
}
}
private void OnPreviewMouseDown(object sender, MouseButtonEventArgs e)
{
isUserInteraction = true;
}
于 2013-01-13T09:06:20.930 回答
2
嗨,您可以在 xaml 中使用它:
<ComboBox x:Name="ComboBoxName" SelectionChanged="ComboBox_SelectionChanged">
<ComboBox.Style>
<Style TargetType="ComboBox">
<Style.Triggers>
<Trigger Property="IsDropDownOpen" Value="True">
<Setter Property="IsEditable" Value="True"></Setter>
</Trigger>
</Style.Triggers>
</Style>
</ComboBox.Style>
</ComboBox>
在后面的代码中:
private void ComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (!((ComboBox)sender).IsEditable) return;
//Do Stuff;
}
于 2017-11-02T09:24:09.633 回答
0
另一种方法是处理 ComboBox 的DropDownOpened
和DropDownClosed
事件。这比 Rafal 接受的答案略好,因为如果用户单击 ComboBox 然后单击其他地方导致 ComboBox 在没有进行选择的情况下关闭,它可以防止布尔标志卡为真。但是,它没有解决的问题是,如果 ComboBox 具有键盘焦点并且用户点击向上和向下箭头来更改选择。
private void Event_ComboBox_DropDownOpened(object sender, EventArgs e)
{
isUserInteraction = true;
}
private void Event_ComboBox_DropDownClosed(object sender, EventArgs e)
{
isUserInteraction = false;
}
private void Event_ComboBox_SelectedChanged(object sender, SelectionChangedEventArgs e)
{
if (isUserInteraction)
{
// Do work
}
}
于 2018-02-25T18:03:27.173 回答