2012-09-20 7 views
0

У меня есть ComboBox с присвоенным ему DataTemplate. DataTemplate выглядит следующим образом:ComboBox: установить текст boxitem в соответствии с условием

<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> 

Я хотел бы добиться того, что «члены» заменяется «член», если MemberCount == 1. Так что мне нужно что-то вроде предложения if-else в XAML.

Есть ли способ достичь этого в XAML?

Заранее благодарен!

ответ

0

Нет. Вы не можете сделать это только в xaml. Вы можете использовать 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

Я хотел бы использовать

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

с дополнительным свойством в вашем ViewModel

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

Редактировать

Здесь решение XAML (возможно, не лучший)

<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>