用匿名类型列表填充AutoCompleteBox

本文关键字:填充 AutoCompleteBox 列表 类型 | 更新日期: 2023-09-27 18:15:22

我正在为我的WPF c#项目创建一个用户选择userControl。我确实为选择做了一个自定义的自动完成控件,但出于优化的目的,我现在正在考虑使用WPF工具箱中的自动完成文本框。

因为我在数据库中有成千上万的用户,我不想使用自定义类或在我检索的列表上有很多foreach。因此,考虑到这一点,我的问题是。

var list = from cu in conn3.customer_users
select new  {
              username    =  cu.username,
             name        =  cu.fname.TrimEnd() + " " + cu.lname.TrimEnd()
                 // This would of course be built with more info from more entities. 
             };
            this.autoComplete.ItemsSource = list.ToList();

现在的问题是,它为结果框输出以下格式(在搜索中)。

{username = DEI1231, name = Missy Anderson}

所以我不想要foreach列表,而是格式化它,因为我绑定它或我做列表。

任何想法?

用匿名类型列表填充AutoCompleteBox

最终选择必须是字符串,而不是匿名类型

 var str = from cu in x
           // your stuff
           select cu.username + cu.fname;

另一个选择是保持匿名类型并在Binding

中使用StringFormat
<TextBlock >
    <TextBlock.Text>
        <MultiBinding StringFormat="{}{0}  {1}">
            <Binding ElementName="username" Path="Text"/>
            <Binding ElementName="name" Path="Text"/>
        </MultiBinding>
    </TextBlock.Text>
</TextBlock>

另一个选择是在匿名类型中有一个字段,该字段包含您想要显示的完整字符串,并使用DisplayMemberPath来绑定

我不想麻烦更多的开始空间,最后决定只允许初始空间,只是从Meta字符串最终剥离所有的空间。

问题实际上是在事件本身,所以这是一个解决方案的存在。我不寻找更多的东西,因为在翻到元与标签内的实际消息,而不是。还有一个前缀。如。@meta让我们看看它是如何工作的;)

 private string metaInput { get; set; }
    public string MetaInput 
    {
        get
        {
            return metaInput;
        }
        set 
        {
            string x = value;
            if (x.Length > 3)
            {
                if (x.EndsWith(" "))
                {
                string z = x.Replace(" ", "");
                x = z.Replace(",", "");
                int l = x.Length;
                    if (l > 2)
                    {
                        metaInput = null;
                        SaveMetaWord(x);
                    }
                    else 
                    {
                        metaInput = null;
                    }
                }
            }
            else 
            {
                metaInput = value;
            }
        }
    }