用匿名类型列表填充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列表,而是格式化它,因为我绑定它或我做列表。
任何想法?
最终选择必须是字符串,而不是匿名类型
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;
}
}
}