Получить bool значение флажка в wpf с привязкой в ​​mvvm C# - PullRequest
0 голосов
/ 19 июня 2020

У меня есть следующий код:

ViewModel:

DownloadDeviceViewModel : ViewModelBase
{
    private bool _isSelected;

    public bool isSelected
    {
        get
        {
            return _isSelected;
        }
        set
        {
            if (_isSelected != value)
            {
                _isSelected = value;
                OnPropertyChanged();

            }
        }
    }

    public void Method()
    {
        if(isSelected)
        {

        }
    }
}

XAML:

<CheckBox Content="Checkbox" IsChecked="{Binding isSelected, Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/>

Метод onPropertyChanged находится в ViewModelBase. Я вставил это не для облегчения чтения.

Каждый раз, когда я вызываю значение isSelected в методе, IsSelected возвращает неверный результат. Несмотря на то, что я установил этот флажок и значение isSelected было установлено на true.

Но в методе значение снова меняется на false.

Что я неправильно реализовал, что значение всегда меняется на false?

Всем спасибо

Ответы [ 2 ]

0 голосов
/ 19 июня 2020

ваша ViewModel должна быть INotifyPropertyChanged:

DownloadDeviceViewModel : ViewModelBase, INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

    public void NotifyPropertyChanged(string nomPropriete)
    {
        if (PropertyChanged != null)
            PropertyChanged(this, new PropertyChangedEventArgs(nomPropriete));
    }
    private bool _isSelected;

    public bool isSelected
    {
        get
        {
            return _isSelected;
        }
        set
        {
            if (_isSelected != value)
            {
                _isSelected = value;
                NotifyPropertyChanged("isSelected");
            }
        }
    }

    public void Method()
    {
        if(isSelected)
        {

        }
    }
}

Тогда в вашем XAML UpdateSourceTrigger не требуется

<CheckBox Content="Checkbox" IsChecked="{Binding isSelected}"/>

достаточно

0 голосов
/ 19 июня 2020

Удалите в установщике условие «if», оно вам не нужно. Это может быть причиной ваших проблем.

        set
        {
                _isSelected = value;
                OnPropertyChanged();
        }
...