2

TextプロパティにMultiBindingを含むTextBlockと、2つの結果をいくつかの追加で連結するStringFormatがあります。

<TextBlock.Text>
   <MultiBinding StringFormat="{}{0} {1}" >
      <Binding Path="Version" />
       <Binding Path="OldVersion" StringFormat="{}'({0})'" TargetNullValue=""/>
    </MultiBinding>
</TextBlock.Text>

最初のStringFormatは期待どおりに機能しますが、2番目は適用されません。括弧なしで値を返します。最初のStringFormatに括弧は必要ありません。これは、2番目の値がNothingである場合があるためです。前もって感謝します。

4

1 に答える 1

2

msdn )を使用すると、内部StringFormatは無視されます。MultiBinding

MultiBindingを使用する場合、StringFormatプロパティは、MultiBindingに設定されている場合にのみ適用されます。子Bindingオブジェクトに設定されているStringFormatの値は無視されます。複合文字列形式のパラメータの数は、MultiBindingの子Bindingオブジェクトの数を超えることはできません。

代わりに、MultiBinding次のコードを使用できます。

<StackPanel Orientation="Horizontal">
    <TextBlock Text="{Binding Version}" />
    <TextBlock Text="{Binding OldVersion, StringFormat=({0}), TargetNullValue=''}" />
</StackPanel>

または、プロパティへのラッパープロパティを作成できますOldVersion

public string OldVersionEx
{
    get
    {
        if (string.IsNullOrEmpty(OldVersion))
            return null;
        else
            return "(" + OldVersion + ")";
    }
}

この場合のバインディングは次のとおりです。

<TextBlock>
    <TextBlock.Text>
        <MultiBinding StringFormat="{}{0} {1}" >
            <Binding Path="Version" />
            <Binding Path="OldVersionEx"/>
        </MultiBinding>
    </TextBlock.Text>
</TextBlock>
于 2013-03-20T17:39:36.640 に答える