バインディング式で2つのプロパティを連結できますか?可能であれば、コンバーターなしで、または2つのテキストブロックを作成して個別に設定せずに?
アルファマウスが示唆しているように、MultiBindingはそのままでは機能しませんが、この男は一緒に役立つ何かを投げています:
それが少し不正なように思える場合は、maybeBindingメカニズムのヘルパーとして、結合されたvalueプロパティをオブジェクトに配置してみてください。
public string FullName {
get { return this.FirstName + " " + this.LastName; }
}
表示したい場合は、FirstName
とLastName
を単一のTextBlock
で言うと、次のようにできます。
<TextBlock>
<Run Text="{Binding FirstName}" />
<Run Text=" " /> <!-- space -->
<Run Text="{Binding LastName}" />
</TextBlock>
これで、TextBlockのText
プロパティは"Sachin Tendulkar"
および次の場合に表示されます。
FirstName = Sachin
LastName = Tendulkar
お役に立てば幸いです。
<TextBlock.Text>
<MultiBinding StringFormat="{}{0} , {1}">
<Binding Path="data1" />
<Binding Path="data2" />
</MultiBinding>
</TextBlock.Text>
data1とdata2は、バインドされる文字列プロパティです。
MultiBinding およびStringFormatを使用してWPFで可能です。しかし、残念ながらSilverlightではそうではありません。
文字列を追加する必要がある場合は、試してください。ここでは、Windows Phoneでテキストをバインドした後に「%」を追加します。
<TextBlock Text="{Binding Path=clouds.all, StringFormat=\{0\}%}"/>
連結を実行するゲッターを使用して、新しいプロパティを追加できます。
FirstName
およびLastName
プロパティがあるとします。その後、次のようにName
プロパティを定義できます。
public string Name { get { return FirstName + " " + LastName; } }
これはうまく機能しますが、読み取り専用プロパティに対して双方向バインディングを行うことはできないことに注意してください。また、ソースプロパティのセッターで連結されたプロパティのプロパティ変更通知を実装することもできます。