4

とプロパティを持つobjectPersonがあります。FirstNameLastName

私の WPF UI にはLabel、フル ネームにバインドする必要がある があります。

<Label Binding="{Binding FullName}" />

次のような別の読み取り専用プロパティを作成したくありません。

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

これら 2 つのプロパティを XAML で連結するにはどうすればよいですか?

4

2 に答える 2

11

いくつかのオプション:

オプション 1: MultiBinding を使用した単一の TextBlock (またはラベル):

<TextBlock>
    <TextBlock.Text>
        <MultiBinding StringFormat="{}{0} {1}">
            <Binding Path="FirstName" />
            <Binding Path="LastName" />
        </MultiBinding>
    </TextBlock.Text>
</TextBlock>

オプション 2: 水平 StackPanel 内の複数の TextBlocks (またはラベル):

<StackPanel Orientation="Horizontal">
    <TextBlock Text="{Binding FirstName}" />
    <TextBlock Text=" " />
    <TextBlock Text="{Binding LastName}" />
</StackPanel>

個人的には、オプション 1 を使用します。

于 2010-01-05T04:52:32.707 に答える
4

Matt が説明した MultiBinding アプローチが気に入っています。ただし、アプリケーションのアーキテクチャによっては、作成したくない FullName プロパティを作成することも、同様に有効な (そしておそらくより望ましい) 選択であることに注意してください。

Model-View-ViewModel を使用していた場合は、ビューにバインドするためだけに FullName プロパティを公開する ViewModel があります。

たとえば、要件が突然変更され、構成設定に応じて First + Last または Last, First としてフォーマットできるようにする必要がある場合、ViewModel で行う方がはるかに簡単です。同様に、FirstName または LastName を変更すると FullName も適切に変更されることを検証する単体テストを作成することは、単純な XAML アプローチを使用して実用的ではありません。

しかし、私が言ったように、すべてはアプリケーションのアーキテクチャに依存します。

于 2010-01-05T05:03:47.350 に答える