c# - 如何取消 ComboBox SelectionChanged 事件?

标签 c# wpf combobox selectionchanged

是否有一种简单的方法可以提示用户确认组合框选择更改,并且如果用户选择否则不处理更改?

我们有一个组合框,更改选择会导致数据丢失。基本上,用户选择一种类型,然后他们就可以输入该类型的属性。如果他们更改类型,我们将清除所有属性,因为它们可能不再适用。问题是要在选择下再次引发 SelectionChanged 事件。

这是一个片段:

if (e.RemovedItems.Count > 0)
{
    result = MessageBox.Show("Do you wish to continue?", 
        "Warning", MessageBoxButton.YesNo, MessageBoxImage.Warning);

    if (result == MessageBoxResult.No)
    {
        if (e.RemovedItems.Count > 0)
            ((ComboBox)sender).SelectedItem = e.RemovedItems[0];
        else
            ((ComboBox)sender).SelectedItem = null;
    }
}

我有两个解决方案,我都不喜欢。

  1. 用户选择'否'后,移除SelectionChanged事件处理程序,更改所选项目,然后注册SelectionChanged再次事件处理程序。这意味着您必须保留类中事件处理程序的引用,以便您可以添加和删除它。

  2. 创建一个 ProcessSelectionChanged bool 值作为类的一部分。始终在事件处理程序开始时检查它。在我们将选择改回之前将其设置为 false,然后再将其重置为 true。这会起作用,但我不喜欢使用标志基本上使事件处理程序无效。

有人有替代解决方案或改进我提到的解决方案吗?

最佳答案

我发现了这个很好的实现。

 private bool handleSelection=true;

private void ComboBox_SelectionChanged(object sender,
                                        SelectionChangedEventArgs e)
        {
            if (handleSelection)
            {
                MessageBoxResult result = MessageBox.Show
                        ("Continue change?", MessageBoxButton.YesNo);
                if (result == MessageBoxResult.No)
                {
                    ComboBox combo = (ComboBox)sender;
                    handleSelection = false;
                    combo.SelectedItem = e.RemovedItems[0];
                    return;
                }
            }
            handleSelection = true;
        }

来源:http://www.amazedsaint.com/2008/06/wpf-combo-box-cancelling-selection.html

关于c# - 如何取消 ComboBox SelectionChanged 事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8608128/

相关文章:

c# - 如何检查 HttpWebRequest 上传的进度?

c# - 获取 GIF 以在 WPF 中播放(使用 GifImage 类)

c# - System.Web.Mvc.UrlHelper.Action 抛出 ArgumentNullException 插入 RouteCollection

c# - => 在属性声明中是什么意思(不是 lambda 表达式)?

c# - "Service X has zero application endpoints"除非我在代码中添加端点 - 为什么?

c# - 如何在 WPF 中创建动画消息横幅

c# - 覆盖 FrameworkPropertyMetadata 中的 DefaultTwoWayByDefault

c++ - 如何在 QTableView 中使用就地 QComboBox

c# - 默认组合框第一项与数据库结果混合

delphi - 为什么 Firemonkey 组合中缺少 & 符号?