2016-03-09 42 views
0

我想将ComboBox的IsEnabled属性绑定到复选框的IsChecked属性,而我希望只有在复选框值为FALSE时才能使用ComboBox。如何将属性绑定为false值

IsEnabled="{Binding ElementName=RegexCbx, Path=IsChecked}" 

这样做的最简单方法是什么?

+0

好,最简单的方法是'DataTrigger'和更好的方式是'ValueConverter' – Gopichandar

+0

只需使用一个转换器 – blindmeis

回答

3

使用样式触发:

<StackPanel> 
    <CheckBox x:Name="Foo" Content="Click me"/> 
    <ComboBox> 
     <ComboBox.Style> 
      <Style TargetType="{x:Type ComboBox}"> 
       <Style.Triggers> 
        <DataTrigger Binding="{Binding IsChecked, ElementName=Foo}" Value="True"> 
         <Setter Property="IsEnabled" Value="False"/> 
        </DataTrigger> 
       </Style.Triggers> 
      </Style> 
     </ComboBox.Style> 
    </ComboBox> 
</StackPanel> 
+0

这是一个简单的伟大解决方案!谢谢!!除此之外,我发现它很有帮助,除此之外,还有多个绑定......它除了第一个之外还添加了“DataTrigger”元素,从而节省了大量代码行! (与“或”一起工作)。谢谢!!!! – MTZ

+0

@MitzMitz:不客气。 ) – Dennis

+0

还有一个问题:)有没有办法做非布尔值。例如,复选框IsEnable取决于组合框,但通过仅使用xaml的简单方法? – MTZ

1

从的IValueConverter衍生应该做的伎俩类:

public class BoolToOppositeBoolConverter : IValueConverter 
{ 
    #region IValueConverter Members 

    public object Convert(object value, Type targetType, object parameter, 
     System.Globalization.CultureInfo culture) 
    { 
     if (targetType != typeof(bool)) 
      throw new InvalidOperationException("The target must be a boolean"); 

     return !(bool)value; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, 
     System.Globalization.CultureInfo culture) 
    { 
     throw new NotSupportedException(); 
    } 

    #endregion 

} 

最好是在资源字典,创建转换器的实例:

<converters:BoolToOppositeBoolConverter x:Key="oppositeBoolConverter" /> 

然后在你的视图中,做这样的事情,其中​​IsChecked的bool值被转换为t o相反的价值。不要忘记包含资源字典作为视图的资源。

<TextBox IsEnabled="{Binding IsChecked, Converter={StaticResource oppositeBoolConverter}" /> 
0

另一种方式来做到这一点,就是用混合DataTrigger

xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity" 
    xmlns:ie="http://schemas.microsoft.com/expression/2010/interactions" 

    <ComboBox> 
     <i:Interaction.Triggers> 
      <ie:DataTrigger Binding="{Binding IsChecked, ElementName=RegexCbx}" 
          Value="False"> 
       <ie:ChangePropertyAction PropertyName="IsEnabled" 
             TargetObject="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=ComboBox}}" 
             Value="True"/> 
      </ie:DataTrigger> 
      <ie:DataTrigger Binding="{Binding IsChecked, ElementName=RegexCbx}" 
          Value="True"> 
       <ie:ChangePropertyAction PropertyName="IsEnabled" 
             TargetObject="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=ComboBox}}" 
             Value="False"/> 
      </ie:DataTrigger> 
     </i:Interaction.Triggers> 
    </ComboBox> 
相关问题