【问题标题】:ComboBox SelectionChanged Event Firing on Preview预览时触发 ComboBox SelectionChanged 事件
【发布时间】:2012-01-30 21:52:43
【问题描述】:

所以我有一个与 DataSet 绑定的 ComboBox,我希望仅在更改选择时触发事件。我尝试使用 SelectionChanged 事件,但只要有建议的项目就会触发。例如,如果我输入“eb”,那么“ebtoulson”将被选中,“toulson”突出显示。我的问题是如何禁止此事件触发建议,还是我使用了错误的事件?任何建议将不胜感激。

【问题讨论】:

  • 您找到解决问题的方法了吗?

标签: c# wpf events combobox


【解决方案1】:

当您输入并出现建议时,您实际上是在更改所选项目,因此应该触发事件。

您有什么特别需要使它仅适用于 UI?

【讨论】:

  • 感谢您的回复。为了让您更深入地了解,我有一个客户表单,我希望根据从组合框中选择的客户来自动填充其他表单元素。但正如我所提到的,如果有人开始输入客户的姓名,并且它以相同的开头字母给出了另一个客户的建议,它会自动填充错误的信息。
【解决方案2】:

我想出了这个解决方案。我认为这不是最理想的,但它涵盖了您的情况。我正在使用PreviewTextInput 事件来处理通过文本输入的选择,并使用DropDownClosed 来处理通过鼠标进行的选择。我的ComboBox控件名为cbTest1,我使用的代码如下:

private void cbTest1_PreviewTextInput(object sender, TextCompositionEventArgs e)
{
    var q = from i in cbTest1.ItemsSource.Cast<ComboBoxItem>()
            where ((string)i.Content).StartsWith(e.Text, StringComparison.OrdinalIgnoreCase)
            select i;
    if (q.Count() == 1)
    {
        // Have typed out a unique name match.
        var ActiveItem = cbTest1.SelectedItem;
    }
    else
    {
        // Name does not match or has multiple matches.
    }
}

private void cbTest1_DropDownClosed(object sender, EventArgs e)
{
    var ActiveItem = cbTest1.SelectedItem;
}

它使用 Linq 表达式来确定用户迄今为止键入的内容是否已将选择范围缩小到单个项目。但是,对于您的情况,该查询的成本可能太高。试试看,然后告诉我。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-17
    • 2014-03-26
    • 2014-05-02
    • 2012-02-03
    • 1970-01-01
    • 2010-12-10
    • 1970-01-01
    • 2016-06-06
    相关资源
    最近更新 更多