web-dev-qa-db-ja.com

データバインディングで2つのプロパティを連結できますか?

バインディング式で2つのプロパティを連結できますか?可能であれば、コンバーターなしで、または2つのテキストブロックを作成して個別に設定せずに?

37
TCM

アルファマウスが示唆しているように、MultiBindingはそのままでは機能しませんが、この男は一緒に役立つ何かを投げています:

http://www.olsonsoft.com/blogs/stefanolson/post/Improvements-to-Silverlight-Multi-binding-support.aspx

それが少し不正なように思える場合は、maybeBindingメカニズムのヘルパーとして、結合されたvalueプロパティをオブジェクトに配置してみてください。

public string FullName {
   get { return this.FirstName + " " + this.LastName; }
}
13
Tom

表示したい場合は、FirstNameLastNameを単一のTextBlockで言うと、次のようにできます。

<TextBlock>
     <Run Text="{Binding FirstName}" />
     <Run Text="   " /> <!-- space -->
     <Run Text="{Binding LastName}" />
</TextBlock>

これで、TextBlockのTextプロパティは"Sachin Tendulkar"および次の場合に表示されます。

FirstName = Sachin
LastName  = Tendulkar

お役に立てば幸いです。

85
Nawaz
<TextBlock.Text>
   <MultiBinding StringFormat="{}{0} , {1}">
     <Binding Path="data1" />
     <Binding Path="data2" />
    </MultiBinding>
</TextBlock.Text>

data1とdata2は、バインドされる文字列プロパティです。

14
Kiran k g

MultiBinding およびStringFormatを使用してWPFで可能です。しかし、残念ながらSilverlightではそうではありません。

6
alpha-mouse

文字列を追加する必要がある場合は、試してください。ここでは、Windows Phoneでテキストをバインドした後に「%」を追加します。

<TextBlock Text="{Binding Path=clouds.all, StringFormat=\{0\}%}"/>
4
reza.cse08

連結を実行するゲッターを使用して、新しいプロパティを追加できます。

FirstNameおよびLastNameプロパティがあるとします。その後、次のようにNameプロパティを定義できます。

public string Name { get { return FirstName + " " + LastName; } }

これはうまく機能しますが、読み取り専用プロパティに対して双方向バインディングを行うことはできないことに注意してください。また、ソースプロパティのセッターで連結されたプロパティのプロパティ変更通知を実装することもできます。

3
Rune Grimstad