【问题标题】:AutoCompleteBox does not get correct value in C# wpfAutoCompleteBox 在 C# wpf 中没有得到正确的值
【发布时间】:2011-07-31 22:11:11
【问题描述】:

我目前正在开发一个 WPF C# 项目。我正在使用 AutoCompleteBox WPF 控件,但在获取开箱即用的值时遇到问题。

假设自动完成框用于服务器名称,当我键入“loc”时,弹出框将显示“localhost”,我从下拉框中选择值。

当我尝试提交表单并尝试获取框的值时,它将获取我输入的值而不是我选择的值,即该值将是“loc”。

下面是我用来填充控件的自动完成项的代码

using (SQLiteDataReader reader = cmd.ExecuteReader())
{
    List<string> serverArr = new List<string>();
    while (reader.Read())
    {
        serverArr.Add(reader["his_server"].ToString());
    }
    txtServer.ItemsSource = serverArr;
}

我通过说 txtServer.Text 从自动完成框中获取值;

更新

As suggested by @Tom Studee I tried using the txtServer.selectedItem which works fine when an item from the auto complete is selected.但是,如果键入的值不在自动完成下拉列表中,则会失败并出现空指针异常。

【问题讨论】:

  • 我无法重现这一点,当我从列表中选择建议的项目时,它还会更新 Text 属性。您的AutoCompleteBox 是如何定义的?
  • @Meleak 如果单击建议的项目,则 SelectedItem 可以正常工作。现在的问题是,如果用户键入的值不在自动完成建议中,则会导致空指针异常
  • 那么,您是在寻找选定的项目还是文本?如果用户选择了不在列表中的项目,则预期结果为 null。如果您正在查找文本值,请使用 Text 属性,还是我遗漏了什么?
  • @Meleak,我需要能够得到任何一个。如果它是一个新条目,我需要获取文本,如果用户选择其中一个建议,我需要获取所选项目。谢谢

标签: c# wpf autocompletebox


【解决方案1】:

使用.SelectedItem 属性代替.Text

【讨论】:

  • 感谢这确实阻止了获取空指针异常我创建了一个 if 语句来检查 .text 是否为空。感谢您的帮助
【解决方案2】:

你也许可以

   string cbValue;
   if (SelectedIndex == -1) cbValue = .Text; else cbValue = .SelectedItem;

【讨论】:

  • 自动完成框没有 selectedindex 选项。
  • 我的 .SelectedItem 部分是正确的。我会记住以后不要尝试回答你们中的任何问题。
  • 我不是在谈论 .SelectedItem 我在谈论 selectedIndex。正如您从我接受的答案中看到的那样, .SelectedItem 对我来说工作正常,但你没有工作。不记得为什么现在太早了。
猜你喜欢
  • 2012-12-13
  • 1970-01-01
  • 2021-05-28
  • 2019-07-20
  • 1970-01-01
  • 2022-10-19
  • 2022-08-16
  • 1970-01-01
  • 2017-10-24
相关资源
最近更新 更多