Domanda

Ho un Person oggetto, che ha FirstName e LastName proprietà.

Nel mio WPF UI, ho un Label che ha bisogno di legarsi al nome completo:

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

Non voglio creare un'altra proprietà di sola lettura come:

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

Come posso concatenare queste due proprietà in XAML?

È stato utile?

Soluzione

Un paio di opzioni:

Opzione 1: TextBlock singolo (o l'etichetta) con un MultiBinding:

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

Opzione 2: TextBlocks multiple (o etichette) in uno StackPanel orizzontale:

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

Personalmente mi piacerebbe andare con l'opzione 1.

Altri suggerimenti

Mi piace l'approccio MultiBinding Matt descritto. Tuttavia, vorrei anche sottolineare che a seconda dell'architettura della vostra applicazione creare la proprietà FullName che non volevi creare è una (e forse una più desiderabile) scelta ugualmente validi.

Se si sta utilizzando Model-View-ViewModel, si avrebbe un ViewModel che esporre una proprietà FullName per il solo scopo di legare alla vista.

Per esempio, se i requisiti improvvisamente cambiato in modo tale che avete bisogno di essere in grado di formattare come Primo + Ultimo o Cognome, Nome a seconda della configurazione impostazione sarebbe molto più facile da fare sul ViewModel. Allo stesso modo, crei un'unit test per convalidare che un cambiamento di Cognome FirstName o comporta anche una variazione appropriata FullName non è pratico utilizzando l'approccio XAML rettilineo.

Ma come ho detto tutto dipende l'architettura della vostra applicazione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top