2012-09-20 43 views
0

我有一個ComboBoxDataTemplate分配給它。 的DataTemplate看起來是這樣的:組合框:根據條件設置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。 所以我需要XAML中的if-else子句。

有沒有什麼辦法可以在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> 

有一個附加屬性在您的視圖模型

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>