Je souhaite afficher une liste d'objets Customer dans un WPF ItemsControl. J'ai créé un DataTemplate pour cela:
<DataTemplate DataType="{x:Type myNameSpace:Customer}">
<StackPanel Orientation="Horizontal" Margin="10">
<CheckBox"></CheckBox>
<TextBlock Text="{Binding Path=Number}"></TextBlock>
<TextBlock Text=" - "></TextBlock>
<TextBlock Text="{Binding Path=Name}"></TextBlock>
</StackPanel>
</DataTemplate>
Donc, ce que je veux, c'est une simple liste (avec des cases à cocher) qui contient NUMBER - NAME. N'existe-t-il pas un moyen de concaténer le numéro et le nom directement dans la partie Reliure?
la source
Si vous souhaitez concaténer une valeur dynamique avec un texte statique, essayez ceci:
<TextBlock Text="{Binding IndividualSSN, StringFormat= '\{0\} (SSN)'}"/>
Écrans : 234-334-5566 (SSN)
la source
Voir l'exemple suivant que j'ai utilisé dans mon code à l'aide de la classe Run:
<TextBlock x:Name="..." Width="..." Height="..." <Run Text="Area="/> <Run Text="{Binding ...}"/> <Run Text="sq.mm"/> <LineBreak/> <Run Text="Min Diameter="/> <Run Text="{Binding...}"/> <LineBreak/> <Run Text="Max Diameter="/> <Run Text="{Binding...}"/> </TextBlock >
la source
Vous pouvez également utiliser une exécution pouvant être liée. Des trucs utiles, surtout si l'on veut ajouter un peu de mise en forme du texte (couleurs, épaisseur de police etc.).
<TextBlock> <something:BindableRun BoundText="{Binding Number}"/> <Run Text=" - "/> <something:BindableRun BoundText="{Binding Name}"/> </TextBlock>
Voici une classe originale:
voici quelques améliorations supplémentaires.
Et c'est tout dans un seul morceau de code:
public class BindableRun : Run { public static readonly DependencyProperty BoundTextProperty = DependencyProperty.Register("BoundText", typeof(string), typeof(BindableRun), new PropertyMetadata(new PropertyChangedCallback(BindableRun.onBoundTextChanged))); private static void onBoundTextChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { ((Run)d).Text = (string)e.NewValue; } public String BoundText { get { return (string)GetValue(BoundTextProperty); } set { SetValue(BoundTextProperty, value); } } public BindableRun() : base() { Binding b = new Binding("DataContext"); b.RelativeSource = new RelativeSource(RelativeSourceMode.FindAncestor, typeof(FrameworkElement), 1); this.SetBinding(DataContextProperty, b); } }
la source