2014-04-19 20 views
0

我已经实现了从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空间(namespace MyApp的)和内窗口

<Window.Resources> 
    <local:ConcatenateFieldsMultiValueConverter x:Key="mvc"/> 
</Window.Resources> 

我独立的类ConcatenateFieldsMultiValueConverter无法识别定义以下。

你能想象为什么这个类无法在Window.Resources中识别吗?

+0

请向我显示您的Converter的名称空间 –

+0

添加Converter的名称空间。 – user3524628

+0

我不是那么远,因为无法识别。 ConcatenateFieldsMultiValueConverter在命名空间MyApp中是未知的。 – user3524628

回答

2

如果您可以使用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。就像在评论中提到的那样,尝试重新编译你的项目,因为发布的代码似乎很好。

+1

Thx很好的解释! – Wingjam

0

首先进行编译,看起来好像只是出现设计时错误。我试图重现你的问题,当我重新编译它就消失了。

它也在运行时运行。

相关问题