XAML
<TextBlock FontSize="14" Foreground="Red">
<TextBlock.Style>
<Style TargetType="TextBlock">
<Setter Property="Visibility" Value="Collapsed"/>
<Style.Triggers>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<!--Here I want to compare with an OR behavior-->
<Condition Binding="{Binding Username}" Value="" />
<Condition Binding="{Binding Username}" Value="{x:Null}"/>
</MultiDataTrigger.Conditions>
<Setter Property="Text" Value="No Username"/>
<Setter Property="Visibility" Value="Visible"/>
</MultiDataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
要触发此操作,Username
必须是null
和empty
,这是没有意义的。事实上,我想要这两个值的OR行为。
注意
我知道我可以添加多个<DataTrigger>
(例如在MultiDataTrigger with OR instead of AND中),因为它们处理的顺序很好,但这正是我所做的。我试图避免。我正在寻找更多的单线解决方案。
答案 0 :(得分:3)
如果DataTrigger应该为某个值和null
工作,则可以使用null
绑定属性替换该值的TargetNullValue
。
TargetNullValue=''
用空字符串替换null
。
<TextBlock FontSize="14" Foreground="Red">
<TextBlock.Style>
<Style TargetType="TextBlock">
<Setter Property="Visibility" Value="Collapsed"/>
<Style.Triggers>
<DataTrigger Binding="{Binding Username, TargetNullValue=''}" Value="">
<Setter Property="Text" Value="No Username"/>
<Setter Property="Visibility" Value="Visible"/>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
还可以专门为空/空字符串创建可见性转换器,并且无需触发器工作:
<TextBlock FontSize="14" Foreground="Red" Text="No Username"
Visibility="{Binding Username, Converter={StaticResource MyStringToVisibiltyConverter}}"/>
其中Convert方法类似于:
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var str = value as string;
return String.IsNullOrEmpty(str) ? Visibility.Visible : Visibility.Collapsed;
}
答案 1 :(得分:1)
为什么不在绑定中执行此操作
private string userName;
public string UserName
{
get { return string.IsNullOrEmpty(userName) ? null : userName; }
set { userName = value; }
}