下面将我的复选框的可见性绑定到转换后的bool。这很好。我如何添加第二个条件?如果转换后的bool为true,我只想让复选框可见,并且选中另一个名为Allowed的复选框。
<CheckBox Grid.Row="3" Foreground="Black" Grid.ColumnSpan="2" x:Name="IsItComplete" IsThreeState="False"
BorderBrush="Black" VerticalContentAlignment="Center"
Checked="IsItComplete_Checked"
Style="{StaticResource CheckBoxStyle1}"
Visibility="{Binding Job.CanItBeComplete, Converter={StaticResource booleanToVisibilityConvertor},
Mode=OneWay,
Source={StaticResource Locator}}">
<CheckBox.Content>
<TextBlock Text="Is It Complete" Margin="0"/>
</CheckBox.Content>
</CheckBox>
答案 0 :(得分:4)
如果您在MVVM下工作,一种方法是在ViewModel中创建一个属性,该属性将处理逻辑并返回一个布尔值,指示复选框是否可见。
第二个复选框也必须绑定到属性,并确保执行TwoWay绑定,以便在选中复选框时更新属性。
答案 1 :(得分:3)
这可以通过我能想到的两种方法解决( of View在View模型中已经提出了单一属性,所以我不会再谈论它了)
将Visibility
与MultiValueConverter
绑定在一起。将两个绑定传递给它:
转换器将对两个值执行AND运算并相应返回。
<CheckBox>
<CheckBox.Visibility>
<MultiBinding Converter="{StaticResource MyConverter}">
<Binding Path="IsEnable"/>
<Binding ElementName="Allowed" Path="IsChecked"/>
</MultiBinding>
</CheckBox.Visibility>
</CheckBox>
MutliValueConverter代码:
public class MyConverter: IMultiValueConverter
{
public object Convert(object[] values, Type targetType,
object parameter, CultureInfo culture)
{
return ((bool)values[0] && (bool)values[1])
? Visibility.Visible : Visibility.Collapsed;
}
public object[] ConvertBack(object value, Type[] targetTypes,
object parameter, CultureInfo culture)
{
return Binding.DoNothing;
}
}
在checkBox样式中使用MultiDataTrigger
,如下所示:
<CheckBox>
<CheckBox.Style>
<Style TargetType="CheckBox">
<Setter Property="Visibility" Value="Collapsed"/>
<Style.Triggers>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding IsEnable}" Value="True"/>
<Condition Binding="{Binding ElementName=Allowed,
Path=IsChecked}" Value="True"/>
</MultiDataTrigger.Conditions>
<Setter Property="Visibility" Value="Visible"/>
</MultiDataTrigger>
</Style.Triggers>
</Style>
</CheckBox.Style>
</CheckBox>