繁体   English   中英

如何在MultiBinding中使用StringFormat?

[英]How to use StringFormat in MultiBinding?

我有以下代码:

<TextBlock>
  <TextBlock.Text>
    <MultiBinding StringFormat="{}{0}{1}">
      <Binding Path=".[ServerName]" TargetNullValue=""/>
      <Binding Path=".[InstanceName]" TargetNullValue="" StringFormat="{}\\{0}"/>
    </MultiBinding>
  </TextBlock.Text>
</TextBlock>

但我得到的结果是“ ServerNameInstanceName”而不是“ ServerName \\ InstanceName”

如果绑定的目标未键入为String ,则将忽略StringFormat 因此,将使用MultiBinding上的StringFormat ,因为TextBlock.TextString (如果您绑定到Label.Content ,因为Label.ContentObject -这是常见的抱怨)。 内部的绑定到.[InstanceName]的对象没有类型为String的目标,因为MultiBindings必须接受任何类型的值。 这样StringFormat被忽略。

以下作品。

<TextBlock>
  <TextBlock.Text>
    <MultiBinding StringFormat="{}{0}\{1}">
      <Binding Path=".[ServerName]" TargetNullValue=""/>
      <Binding Path=".[InstanceName]" TargetNullValue="" />
    </MultiBinding>
  </TextBlock.Text>
</TextBlock>

如果您这样做是为了消除.[InstanceName]为null的情况下的反斜杠,那么您会遇到问题。 我将编写一个多值转换器以插入反斜杠,或者不插入反斜杠,并跳过StringFormat 没有办法让StringFormat在这里执行您需要的操作。 只是不够聪明。

C#

public class ServerInstance : MarkupExtension, IMultiValueConverter
{
    public override object ProvideValue(IServiceProvider serviceProvider)
    {
        return this;
    }

    public object Convert(object[] values, Type targetType, 
        object parameter, CultureInfo culture)
    {
        var server = $"{values[0]}0";
        var instance = $"{values[1]}";

        if (instance == "")
            return server;

        if (server == "")
            return "";

        return $"{server}\\{instance}";
    }

    public object[] ConvertBack(object value, Type[] targetTypes, 
        object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

XAML

<TextBlock>
  <TextBlock.Text>
    <MultiBinding Converter="{local:ServerInstance}">
      <Binding Path=".[ServerName]" />
      <Binding Path=".[InstanceName]" />
    </MultiBinding>
  </TextBlock.Text>
</TextBlock>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM