【问题标题】:ComboBox: Set text of boxitem based on conditionComboBox:根据条件设置boxitem的文本
【发布时间】:2012-09-20 07:16:07
【问题描述】:

我有一个 ComboBox 并分配了一个 DataTemplateDataTemplate 看起来像这样:

<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 中实现这一点?

提前致谢!

【问题讨论】:

    标签: c# wpf xaml datatemplate multibinding


    【解决方案1】:

    没有。您不能仅在 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";            
        }
    
        /* ... */   
    }
    

    【讨论】:

      【解决方案2】:

      我会用

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-24
        • 1970-01-01
        • 2023-03-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多