将Xaml单选按钮绑定到布尔值

时间:2013-08-26 17:45:03

标签: wpf xaml

我看到很多关于如何将布尔值绑定到单选按钮的帖子。但我的情况是我需要将它绑定到一个单选按钮并从用户那里读取选择。

不应该选择任何选项。

如果我将它绑定到布尔值,由于布尔值不能为空,它会显示在单选按钮中选择的默认值。

如果我使用可空布尔值,我在尝试使用转换器时仍然默认为false。

我无法在xaml中使用单向模式,因为我需要检查是否使用有界变量进行单选按钮选择。

关于如何实现这个的Ant指针?

2 个答案:

答案 0 :(得分:7)

您可以将可以为空的布尔值绑定到单选按钮,但是您需要通过转换器进行绑定。

首先声明你的变量:

private bool? answer;
public bool? Answer
{
    get { return answer; }
    set
    {
        answer = value;
        if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs("Answer"));
    }
}

并将其初始化为null

然后在XAML中:

<Window.Resources>
    <local:BooleanConverter x:Key="BooleanConverter"/>
</Window.Resources>

<StackPanel Grid.Row="1">
    <RadioButton Content="I Agree"
                 IsChecked="{Binding Answer,
                             Converter={StaticResource BooleanConverter},
                             ConverterParameter='true', Mode=TwoWay}" />
    <RadioButton Content="I Disagree"
                 IsChecked="{Binding Answer,
                             Converter={StaticResource BooleanConverter},
                             ConverterParameter='false', Mode=TwoWay}" />
</StackPanel>

最后你的转换器:

class BooleanConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        var test = (bool?)value;
        var result = bool.Parse((string)parameter);

        if (test == result)
        {
            return true;
        }

        return false;
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        var result = bool.Parse((string)parameter);
        return result;
    }
}

这会将单选按钮绑定到Answer,并指出只有当值为true时才会检查第一个按钮,而当答案为false时将检查第二个按钮。然后,您可以在让用户继续操作之前检查Answer是否为空。

答案 1 :(得分:0)

这可能不是最好的方法,但你可以使用类似的东西: checkbox like radiobutton wpf c# 并且只有两个控件。

我很欣赏它并不是最好的,但是阅读你的答案它会给你你想要的东西(通常)。