将复选框可见性绑定到转换后的bool和另一个复选框可见性

时间:2014-01-07 15:47:24

标签: c# wpf visibility

下面将我的复选框的可见性绑定到转换后的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>

2 个答案:

答案 0 :(得分:4)

如果您在MVVM下工作,一种方法是在ViewModel中创建一个属性,该属性将处理逻辑并返回一个布尔值,指示复选框是否可见。

第二个复选框也必须绑定到属性,并确保执行TwoWay绑定,以便在选中复选框时更新属性。

这应该有所帮助:Bind two elements' Visibility to one property

答案 1 :(得分:3)

这可以通过我能想到的两种方法解决( of View在View模型中已经提出了单一属性,所以我不会再谈论它了

方法1

VisibilityMultiValueConverter绑定在一起。将两个绑定传递给它:

  1. 类的实际bool属性。
  2. IsChecked DP of Allowed复选框。
  3. 转换器将对两个值执行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;
        }
    }
    

    方法2

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