Pergunta

Eu tenho um Person objeto, que tem FirstName e LastName propriedades.

Na minha WPF UI, eu tenho um Label que precisa para se ligar ao nome completo:

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

Eu não quero criar outra propriedade somente leitura como:

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

Como posso concatenar essas duas propriedades em XAML?

Foi útil?

Solução

Um par de opções:

Opção 1: Única TextBlock (ou etiqueta) com um MultiBinding:

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

Opção 2: Múltiplas TextBlocks (ou etiquetas) em um StackPanel horizontal:

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

Pessoalmente, eu iria com a opção 1.

Outras dicas

Eu amo a abordagem MultiBinding Matt descrito. No entanto, gostaria também de salientar que, dependendo da arquitetura do seu aplicativo criando a propriedade FullName que você não deseja criar é uma (e sem dúvida uma mais desejável) escolha igualmente válidas.

Se você estava usando Model-View-ViewModel, você teria um ViewModel que iria expor uma propriedade FullName com o único propósito de ligar para a vista.

Por exemplo, se os requisitos de repente mudou de tal forma que você precisava para ser capaz de formatá-lo como Primeiro + Última ou Sobrenome, dependendo de uma definição que seria muito mais fácil de fazer no ViewModel configuração. Da mesma forma, escrever um teste de unidade para validar que uma mudança para FirstName ou LastName também resulta em uma mudança apropriada no FullName não é prático usar a abordagem XAML reta.

Mas como eu disse, tudo depende da arquitetura de sua aplicação.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top