如何将多个值绑定到一个标签
本文关键字:标签 一个 绑定 | 更新日期: 2023-09-27 17:58:57
我已经从Link实现了IMultiValueConverter,将多个值绑定到一个标签。
namespace MyApp
{
[ValueConversion(typeof(object), typeof(string))]
public class ConcatenateFieldsMultiValueConverter : IMultiValueConverter
{
public object Convert(
object[] values,
Type targetType,
object parameter,
System.Globalization.CultureInfo culture
)
{
string strDelimiter;
StringBuilder sb = new StringBuilder();
if (parameter != null)
{
//Use the passed delimiter.
strDelimiter = parameter.ToString();
}
else
{
//Use the default delimiter.
strDelimiter = ", ";
}
//Concatenate all fields
foreach (object value in values)
{
if (value != null && value.ToString().Trim().Length > 0)
{
if (sb.Length > 0) sb.Append(strDelimiter);
sb.Append(value.ToString());
}
}
return sb.ToString();
}
public object[] ConvertBack(
object value,
Type[] targetTypes,
object parameter,
System.Globalization.CultureInfo culture
)
{
throw new NotImplementedException("ConcatenateFieldsMultiValueConverter cannot convert back (bug)!");
}
}
}
然而,当我引用时
xmlns:local="clr-namespace:MyApp"
在XAML(命名空间MyApp)中的窗口属性中,并在Window 中定义以下内容
<Window.Resources>
<local:ConcatenateFieldsMultiValueConverter x:Key="mvc"/>
</Window.Resources>
无法识别我的独立类ConcatenateFieldsMultiValueConverter。
你能想象为什么这个类不能在Window.Resources中识别吗?
如果可以使用TextBlock
,则可以在没有任何转换器的情况下仅使用XAML来完成。
<TextBlock>
<TextBlock.Text>
<MultiBinding StringFormat="{}{0}, {1}">
<Binding Path="Property1"/>
<Binding Path="Property2"/>
</MultiBinding>
</TextBlock.Text>
</TextBlock>
但它不适用于Label,因为它使用的是Content属性,而不是Text。因此无法应用StringFormat。
对于Label
,您必须使用IMultiValueConverter
。就像评论中提到的,试着重新编译你的项目,因为发布的代码看起来很好。
首先编译它,看起来你只是得到了设计时的错误。我试图重现你的问题,当我重新编译时,它就消失了。
它也在运行时运行。