2012-09-20 6 views
0

J'ai un ComboBox avec un DataTemplate affecté à lui. Le DataTemplate ressemble à ceci:ComboBox: Définir le texte de boxitem basé sur la condition

<Style x:Key="ComboBox_EntityCreation_GroupSelect_Style" TargetType="{x:Type ComboBox}"> 
    <Setter Property="ItemTemplate"> 
     <Setter.Value> 
      <DataTemplate> 
       <TextBlock> 
        <TextBlock.Text> 
         <MultiBinding StringFormat="{}{0} {1} Members"> 
          <Binding Path="Name"/> 
          <Binding Path="MemberCount"/> 
         </MultiBinding> 
        </TextBlock.Text> 
       </TextBlock> 
      </DataTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

Je voudrais obtenir que les « membres » est remplacé par « membre » si MemberCount == 1. J'ai donc besoin de quelque chose comme une clause if-else dans XAML.

Y a-t-il un moyen de réaliser cela en XAML?

Merci d'avance!

Répondre

0

Non. Vous ne pouvez pas le faire uniquement dans xaml. Vous pouvez utiliser un MultiValueConverter.

<Window.Resources> 
    <c:MemberConverter x:Key="myMemberConverter"/> 
... 
</Window.Resources> 

... 
<TextBlock.Text> 
    <MultiBinding Converter="{StaticResource myMemberConverter}"> 
     <Binding Path="Name"/> 
     <Binding Path="MemberCount"/> 
    </MultiBinding> 
</TextBlock.Text> 
public class NameConverter : IMultiValueConverter 
{ 
    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) 
    { 
     if((values[1] as int) == 1) 
     { 
      return (values[0].ToString()) + "\t" + values[1].ToString() + "Member"; 
     } 
     return (values[0].ToString()) + "\t" + values[1].ToString() + "Members";    
    } 

    /* ... */ 
} 
0

J'utiliser

<MultiBinding StringFormat="{}{0} {1} Member{2}"> 
    <Binding Path="Name"/> 
    <Binding Path="MemberCount"/> 
    <Binding Path="MemberPluralS"/> 
</MultiBinding> 

avec une propriété supplémentaire dans votre ViewModel

public string MemberPluralS 
{ 
    get { return MemberCount != 1 ? "s" : string.Empty; } 
} 

Modifier

Voici une solution XAML (peut-être pas le meilleur)

<TextBlock> 
    <TextBlock.Style> 
     <Style TargetType="TextBlock"> 
     <Setter Property="Text"> 
      <Setter.Value> 
       <MultiBinding StringFormat="{}{0} {1} Members"> 
        <Binding Path="Name"/> 
        <Binding Path="MemberCount"/> 
       </MultiBinding>       
      </Setter.Value> 
     </Setter> 
     <Style.Triggers> 
      <DataTrigger Binding="{Binding MemberCount}" Value="1"> 
       <Setter Property="Text" Value="{Binding Name, StringFormat='{}{0} 1 Member'}" /> 
      </DataTrigger> 
     </Style.Triggers> 
     </Style> 
    </TextBlock.Style> 
</TextBlock> 
Questions connexes