WPF Radiobutton свойство привязки - PullRequest
0 голосов
/ 03 июля 2018

Я пишу приложение на основе мастера, где я загружаю разные usercontrol для каждого шага. Пользовательский контроль, который загружен, имеет переключатель, связанный с 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 голосов
/ 04 июля 2018

Вы можете использовать одно свойство и конвертер, который вы можете использовать в качестве инвертора:

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}}"/>
0 голосов
/ 04 июля 2018

Где вы "восстанавливаете" значения? Это должно работать, если изначально установить для свойства Yes или No значение 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");
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...