Question

J'ai un Person objet, qui a des propriétés de FirstName et LastName.

Dans mon interface WPF, j'ai une Label qui a besoin de se lier au nom complet:

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

Je ne veux pas créer une autre propriété en lecture seule comme:

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

Comment puis-je concaténer ces deux propriétés en XAML?

Était-ce utile?

La solution

Un couple d'options:

Option 1: Single TextBlock (ou étiquettes) avec un MultiBinding:

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

Option 2: TextBlocks multiples (ou étiquettes) dans un StackPanel horizontal:

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

Personnellement, je partirais avec l'option 1.

Autres conseils

J'adore l'approche MultiBinding Matt décrit. Cependant, je tiens également à noter que, selon l'architecture de votre application créant la propriété FullName que vous ne voulez pas créer est un tout aussi valable (et sans doute un plus souhaitable) choix.

Si vous utilisez Model-View-ViewModel, vous auriez un ViewModel qui exposerait une propriété FullName dans le seul but de se lier à la vue.

Par exemple, si les exigences soudainement changé de telle sorte que vous avez besoin pour être en mesure de le formater en tant que premier + dernier ou dernier, d'abord en fonction d'un paramètre de configuration, il serait beaucoup plus facile à faire sur le ViewModel. De même, l'écriture d'un test unitaire pour valider qu'un changement de prenom LastName entraîne également une modification appropriée FullName est pas pratique en utilisant l'approche XAML droite.

Mais comme je l'ai dit tout dépend de l'architecture de votre application.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top