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 窗口属性(命名空间 MyApp)中并在 Window 中定义以下内容

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

我的单独类 ConcatenateFieldsMultiValueConverter 无法识别。

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

4

2 回答 2

3

如果你可以使用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. 就像评论中提到的那样,尝试重新编译您的项目,因为发布的代码看起来不错。

于 2014-04-19T14:37:33.870 回答
0

首先编译它,看起来你只是得到设计时错误。我尝试重现您的问题,当我重新编译时它消失了。

它也在运行时运行。

于 2014-04-19T14:31:43.463 回答