我MultiDataTrigger
看起来像这样:
<Style x:Key="btnStyle" TargetType="{x:Type Button}" BasedOn="{StaticResource BaseBtnStyle}">
<Setter Property="UIElement.IsEnabled" Value="False" />
<Setter Property="Margin" Value="3,2"/>
<Setter Property="Template" Value="{DynamicResource GrayButtonTemplate}"/>
<Style.Triggers>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding Num}" Value="1"/>
<Condition Binding="{Binding Str}" Value="aaa"/>
</MultiDataTrigger.Conditions>
<Setter Property="UIElement.IsEnabled" Value="True" />
</MultiDataTrigger>
</Style.Triggers>
</Style>
目标是只要str = aaa和Num = 1就会启用该按钮。
有效。
问题是我希望按钮启用即使Num = 2 (和str = aaa)
我尝试在第一个之后添加更多MultiDataTrigger
:
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding Num}" Value="2"/>
<Condition Binding="{Binding Str}" Value="aaa"/>
</MultiDataTrigger.Conditions>
<Setter Property="UIElement.IsEnabled" Value="True" />
</MultiDataTrigger>
他没有提及它,该按钮仅在Num = 1时启用。
还有另一种方法吗?
答案 0 :(得分:2)
我能看到的最简单的解决方案是在您的对象中创建IsEnabled
属性,其中Str
和Num
public bool IsEnabled
{
get
{
return (Num == 1 || Num == 2) && Str == "aaa";
}
}
绑定IsEnabled
Style
<Setter Property="IsEnabled" Value="{Binding Path=IsEnabled}"/>
每次Str
或Num
更改时都会通知IsEnabled
更改
答案 1 :(得分:1)
使用转换器
声明IsEnabled属性的绑定 <Style x:Key="btnStyle" TargetType="{x:Type Button}" BasedOn="{StaticResource BaseBtnStyle}">
<Setter Property="UIElement.IsEnabled" Value="False" />
<Setter Property="Margin" Value="3,2"/>
<Setter Property="Template" Value="{DynamicResource GrayButtonTemplate}"/>
<Setter Property="IsEnabled" Value="{Binding Converter={StaticResource myconverter}}"/>
</Style>
由于我们没有指定Binding的路径,因此整个数据上下文对象将通过转换器。根据几个条件,您可以返回true或false,这将启用或禁用按钮。
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
var foo = (foo) value;
return (foo.num == 1 || foo.num == 2) && foo.str == "aaa";
}