J'utilise actuellement le TextBlock
ci-dessous pour lier la valeur d'une propriété nommée Name
:
<TextBlock Text="{Binding Name}" />
Maintenant, je veux lier ne autre propriété nommée ID
à la même TextBlock
.
Est-il possible de lier deux ou plusieurs valeurs à la même TextBlock
? Peut-on le faire avec une simple concaténation, comme Name + ID
et, sinon, comment pourrait-on l’aborder autrement?
Vous pouvez utiliser un MultiBinding
combiné à la propriété StringFormat
. L'utilisation ressemblerait à ceci:
_<TextBlock>
<TextBlock.Text>
<MultiBinding StringFormat="{}{0} + {1}">
<Binding Path="Name" />
<Binding Path="ID" />
</MultiBinding>
</TextBlock.Text>
</TextBlock>
_
Avec une valeur de Nom de Foo
et une valeur pour ID de _1
_, le résultat affiché dans le TextBlock serait _Foo + 1
_.
Note:
cela n'est pris en charge que par .NET 3.5 SP1 et 3.0 SP2 ou version ultérieure.
Je sais que nous sommes en retard, mais je pensais ajouter une autre façon de procéder.
Vous pouvez tirer parti du fait que la propriété Text peut être définie à l'aide de " Run s", de sorte que vous pouvez configurer plusieurs liaisons en utilisant un Run pour chacune d'entre elles. Ceci est utile si vous n'avez pas accès à MultiBinding (que je n'ai pas trouvé lors du développement pour Windows Phone)
<TextBlock>
<Run Text="Name = "/>
<Run Text="{Binding Name}"/>
<Run Text=", Id ="/>
<Run Text="{Binding Id}"/>
</TextBlock>
Si ce ne sont que des blocs de texte (et donc une liaison à sens unique) et que vous souhaitez simplement concaténer des valeurs, liez simplement deux blocs de texte et placez-les dans un panneau de pile horizontal.
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Name}"/>
<TextBlock Text="{Binding ID}"/>
</StackPanel>
Cela affichera le texte (ce que font tous les Textblocks) sans avoir à coder davantage. Vous pouvez toutefois leur attribuer une petite marge pour leur donner une apparence correcte.
Utilisez un ValueConverter
[ValueConversion(typeof(string), typeof(String))]
public class MyConverter: IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return string.Format("{0}:{1}", (string) value, (string) parameter);
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return DependencyProperty.UnsetValue;
}
}
et dans le balisage
<src:MyConverter x:Key="MyConverter"/>
. . .
<TextBlock Text="{Binding Name, Converter={StaticResource MyConverter Parameter=ID}}" />