我正在为我的WPF C#项目选择userControl。 我确实为选择创建了一个自定义自动完成控件,但出于优化目的,我现在正在研究使用WPF Toolkit中的AutoComplete文本框。
由于我在数据库中有成千上万的用户,我不想使用自定义类或在我检索的列表上的许多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}
所以我不想要预先列出这个列表,而是将其格式化为我绑定它或者我列出的列表。
有什么想法吗?
答案 0 :(得分:1)
您最终选择必须是字符串而不是匿名类型
var str = from cu in x
// your stuff
select cu.username + cu.fname;
另一种选择是保留匿名类型并在绑定中使用StringFormat
<TextBlock >
<TextBlock.Text>
<MultiBinding StringFormat="{}{0} {1}">
<Binding ElementName="username" Path="Text"/>
<Binding ElementName="name" Path="Text"/>
</MultiBinding>
</TextBlock.Text>
</TextBlock>
另一种选择是让匿名类型的字段具有您想要显示的完整字符串,并使用 DisplayMemberPath 进行绑定
答案 1 :(得分:-1)
我不想用开头的空间来解决更多问题,最后做了一个只允许初始空间的决定,最后无论如何都要从Meta字符串中删除所有空格。
实际上问题实际上是在它自己的情况下,所以这是通过解决方案的存在。我没有进一步研究这个问题,因为转而使用标签内部的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;
}
}
}