web-dev-qa-db-ja.com

WPFXAMLのマルチバインディングでstringformatを使用する方法

ご存知のように、StringFormatはWPFでのデータ表現にとって非常に重要です。私の問題は、WPFでマルチバインドするときにStringFormatを使用する方法です。

非常に簡単な例を挙げれば:

AとBで、値が10.255555と25.6999999の変数があります。

そして、私たちはそれらを見せたいです10.2,25.6

マルチバインディングでこれを行うにはどうすればよいですか?通常、それはValueConverterを備えたケーキです

このトピックに関するヘルプやアイデアは大歓迎です

14
ibrahimyilmaz

StringFormatMultiBindingプロパティを設定するだけです。マルチバインディングの各バインディングにプレースホルダー({0}、{1} ...)を使用し、必要に応じてフォーマット指定子を含めます(たとえば、10進数が1桁の10進数の場合はF1)

<TextBlock>
    <TextBlock.Text>
        <MultiBinding StringFormat="{}{0:F1}{1:F1}">
            <Binding Path="A" />
            <Binding Path="B" />
        </MultiBinding>
    </TextBlock.Text>
</TextBlock>

先頭の{}部分は、フォーマット文字列がエスケープシーケンスです(そうでない場合、XAMLパーサーは{をマークアップ拡張の先頭と見なします)

53
Thomas Levesque

誰かが「時間形式」を探しているなら、これは私がこの投稿に来た方法である24時間制です:

<TextBlock TextAlignment="Center">
    <TextBlock.Text>
        <MultiBinding StringFormat="{}{0:HH:mm} - {1:HH:mm}">
             <Binding Path="StartTime" />
             <Binding Path="EndTime" />
        </MultiBinding>
    </TextBlock.Text>
</TextBlock>

先頭の0:および1:はバインディングへの参照です

[0:hh:mm tt] AM/PMを表示します

7
user1656632

単純化するために、2つのTextBlock/Labelsを使用して値を表示できます。

.Net4を使用している場合は、TextBlockのRunInline要素にバインドできます。

<TextBlock>
    <Run Text="{Binding A, StringFormat={}{0:F1}}"/>
    <Run Text="{Binding B, StringFormat={}{0:F1}}"/>
</TextBlock>
6
Shawn Kendrot