WPF单选按钮属性绑定

时间:2018-07-03 17:58:51

标签: wpf mvvm data-binding

我正在编写一个基于向导的应用程序,在其中,我为每个步骤加载了不同的用户控件。加载的用户控件具有绑定到2个属性的单选按钮。当我尝试加载现有的用户控件时,单选按钮状态无法恢复。单选按钮绑定到的属性的值设置为false。

下面是视图和模型代码段

public bool Yes
    {
        get
        {
            return _yes;
        }
        set
        {
            _yes = value; // Value is set to false whenever the view is reloaded.
            NotifyPropertyChanged(value.ToString());

        }
    }
    public bool No
    {
        get
        {
            return _no;
        }
        set
        {
            _no = value;

            Yes = !value;
            //if (value)
            //{
            //  Yes = !_no;
            //}
        }
    }

查看:

<RadioButton  x:Name="Yes" GroupName ="Check" Content="Yes" Margin="24,0,0,0"  IsChecked="{Binding Yes, Mode=TwoWay}"/>
                <RadioButton  x:Name="No"   GroupName ="Check" Content="No" Margin="24,0,0,0" IsChecked="{Binding No,  Mode=TwoWay}"/>

想知道为什么以及如何将值设置为false吗?

2 个答案:

答案 0 :(得分:1)

您在哪里“恢复”值?如果最初将YesNo属性设置为true,它应该可以工作。请参考以下示例代码,其中最初选择“是”:

private bool _yes = true;
public bool Yes
{
    get
    {
        return _yes;
    }
    set
    {
        _yes = value; // Value is set to false whenever the view is reloaded.
        _no = !value;
        NotifyPropertyChanged("Yes");

    }
}

private bool _no;
public bool No
{
    get
    {
        return _no;
    }
    set
    {
        _no = value;
        _yes = !value;
        NotifyPropertyChanged("No");
    }
}

答案 1 :(得分:0)

您可以使用单个属性以及可以用作逆变器的转换器:

private bool _IsYes;
public bool IsYes
{
    get
    {
        return _IsYes;
    }
    set
    {
        _IsYes = value;
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("IsYes"));
    }
}

在这里 BooleanInverter

public class BooleanInverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        if (value == null)
            return false;

        return !value;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        if (value == null)
            return false;

        return !value;
    }
}

XAML可能如下所示:

将逆变器添加为资源:

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

并使用它:

<RadioButton Content="Yes" IsChecked="{Binding IsYes}"/>
<RadioButton Content="No" IsChecked="{Binding IsYes, Converter={StaticResource Inverter}}"/>