【问题标题】:WPFToolkit AutoCompleteBox Property Text is not updated after select item选择项目后 WPFToolkit AutoCompleteBox 属性文本未更新
【发布时间】:2015-10-09 11:20:38
【问题描述】:

从列表中选择一个项目后,自动组合框的文本属性没有更新。

XAML:

<toolkit:AutoCompleteBox Name="acbAuftragsnummer" >

代码背后:

acbAuftragsnummer.ItemsSource = list; // String List that contains proposals
string text = acbAuftragsnummer.Text; // Contains only entered text, but not selected text from proposal list

附加信息: 如果输入的文本至少有 3 个字符,我只想 AutoCompleteBox 提出建议。所以我有一个这样的 TextChanged EventHandler:

        private void acbAuftragsnummer_TextChanged(object sender, RoutedEventArgs e)
    {
        if (acbAuftragsnummer.Text.Length > 2)
        {
            acbAuftragsnummer.ItemsSource = _vorschlaegeAuftragsnummerList.Where(o => o.StartsWith(acbAuftragsnummer.Text)).Take(10);
        }
    }

如果我从列表中选择一些元素,这也会更新 ItemsSource。这似乎导致了问题。

【问题讨论】:

    标签: c# wpf xaml wpftoolkit


    【解决方案1】:

    您是否将文本框限制为仅源集合中的条目?我怀疑这不是允许的任何值,即使 null

    ,前面的文本也是有效的

    【讨论】:

    • 不,我不能将文本限制为仅列出条目。也必须允许其他值。但是,如果我从列表中选择一个文本,我需要该项目的全文,而不是我输入的文本(如果你想使用自动完成,这很有意义)。
    • 是的,我明白你的意思。我已经很长时间没有使用自动完成框了,因为我使用扩展工具包已经有一段时间了。你有一个快速的示例项目,我会为你调整它吗?
    • 我认为您现在设法解决了这个问题,或者不再坚持这条路线?
    【解决方案2】:

    我删除了 TextChanged 事件处理程序并将列表添加到 AutoCompleteBox 一次(如果已加载页面)。然后我使用了 MinimumPrefixLength="3" 来满足我的要求。

    【讨论】:

    • 我正要自己提出这个建议,但我看到您已经找到了自己的答案。唯一的障碍是如果您希望引用一个您不希望首先拉回所有条目的项目数据库。出现问题是因为您正在更改源,因此它无法引用已选择的自动完成项目,并将 Text 保留为输入的内容。
    • 你是对的。这实际上只是一种解决方法,因为现在我必须在开始时从数据库中加载完整列表。我不能只根据 AutoComboBox 中输入的第一个字母来获取列表条目的子集。但它目前对我有用。
    • 您希望我调查替代方案还是您乐意接受?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-10
    • 2014-07-17
    • 2013-06-14
    • 2021-05-21
    • 2021-10-26
    • 2023-03-19
    相关资源
    最近更新 更多