我有ComboBox
分配了DataTemplate
。
DataTemplate
看起来像这样:
<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 :(得分: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";
}
/* ... */
}
答案 1 :(得分: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>