IsEnabled的WPF元素数据绑定(但是为false)

时间:2010-06-23 06:36:50

标签: wpf data-binding checkbox isenabled

我是WPF的首发,而且我似乎无法弄明白。

如果未选择CheckBox,我想要禁用RadioButton。 我目前的语法是:

<CheckBox IsEnabled="{Binding ElementName=rbBoth, Path=IsChecked}">Show all</CheckBox>

所以基本上,我希望IsEnabled采用与我目前提供的绑定表达式相反的值。

我该怎么做?感谢。

4 个答案:

答案 0 :(得分:20)

你需要使用所谓的值转换器(一个实现IValueConverter的类。)这个类的一个非常基本的例子如下所示。 (注意剪裁......)

public class NegateConverter : IValueConverter
{

    public object Convert( object value, Type targetType, object parameter, CultureInfo culture )
    {
        if ( value is bool ) {
            return !(bool)value;
        }
        return value;
    }

    public object ConvertBack( object value, Type targetType, object parameter, CultureInfo culture )
    {
        if ( value is bool ) {
            return !(bool)value;
        }
        return value;
    }

}

然后将其包含在您的XAML中,您将执行以下操作:

<UserControl xmlns:local="clr-namespace:MyNamespace">
    <UserControl.Resources>
        <local:NegateConverter x:Key="negate" />
    </UserControl.Resources>

    ...
    <CheckBox IsEnabled="{Binding IsChecked, ElementName=rbBoth, Converter={StaticResource negate}}"
              Content="Show all" />

</UserControl>

答案 1 :(得分:1)

您当前的语法已满足您的需求。如果未选中radiobutton,它将禁用该复选框。

如果你真的想要反转场景,你只需要一个转换器。看一下这个sample

答案 2 :(得分:0)

这个怎么样:

为布尔值创建转换器:

class BooleanValueInverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        if (!(parameter is IValueConverter))
        {
            if (value is bool)
                return !(bool)value;
            else
                return DependencyProperty.UnsetValue;
        }
        else
        {
            IValueConverter converter = (IValueConverter)parameter;
            if (value is bool)
            {
                bool input = !(bool)value;
                return converter.Convert(input, targetType, null, culture);
            }
            else
            {
                return DependencyProperty.UnsetValue;
            }
        }
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

在xaml中导入实现逆变器类的命名空间:

xmlns:util="clr-namespace:MyApp.Utilities"

在资源部分添加引用逆变器类:

<util:BooleanValueInverter x:Key="Inverter" />

然后就这样简单地使用它:

<TextBox Text="{Binding Path=TextProperty}" IsEnabled="{Binding SomeBoolPropertyToInvert, Converter={StaticResource Inverter}}"/>

答案 3 :(得分:0)

$host = "localhost";
$user = "root";
$pass = "";
$db = "fast";
$con = mysqli_connect($host, $user, $pass, $db);

// Check connection

if (mysqli_connect_errno()) {
    die("Failed to connect to MySQL: " . mysqli_connect_error());
}

if (isset($_POST['username'])) {
    $username = $_POST['username'];
    $password = $_POST['password'];
    $sql = "SELECT * FROM users WHERE username='" . $username . "' AND     password='" . $password . "' LIMIT 1";
    $res = mysqli_query($con, $sql);
    if (mysqli_num_rows($res) > 0) {
        echo "You have succesfully logged in.";
        exit();
    }
    else {
        echo "Invalid login information. Please return the previous page";
        exit();
    }

    mysqli_close($con);
}