Как изменить свойство bool нажатием кнопки? - PullRequest
1 голос
/ 30 сентября 2019

Я использую Button для изменения моего IsSelected свойства. Я использую MVVM Light ViewModelBase, чтобы вызвать событие PropertyChanged.

Модель

private bool _isSelected = true;

public bool IsSelected
{
    get
    {
        return _isSelected;
    }
    set
    {
        Set(IsSelected, ref _isSelected, value);
        Messenger.Default.Send(Message.message);
    }
}

//ICommand
public const string isSelectedCommandPropertyName = "isSelectedCommand";

private ICommand _isSelectedCommand;

public ICommand isSelectedCommand
{
    get
    {
        IsSelected = !IsSelected;
        return null;
    }
    set
    {
        Set(isSelectedCommandPropertyName, ref _isSelectedCommand, value);
        Messenger.Default.Send(Message.message);
    }
}

Просмотр

<Button Command="{Binding IsSelected, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"> Click </Button>

Этот набор кодов успешно работает, если я использую свойство ToggleButton Ischecked. Этот код работает , КРОМЕ для кнопки. Я думаю, что что-то упустил.

1 Ответ

1 голос
/ 01 октября 2019

Ваша ICommand реализация неверна, @Fildor также указал в комментариях, которые связали этот вопрос , который помог мне придумать этот ответ.

В Модель , вам необходимо связать RelayCommand с View Button.

private RelayCommand IsSelectedCommand {get; set;}

// then your void isSelected function, this is the command to be called if button is clicked
public void isSelectedCommand()
{
    IsSelected = !IsSelected;
}

public your_model()
{
    this.IsSelectedCommand = new RelayCommand(this.isSelectedCommand)
}

Затем связать RelayCommand IsSelectedCommand вместо привязкинепосредственно ваш IsSelected в вашем Button в вашем представлении .

<Button Command="{Binding IsSelectedCommand, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"> Click </Button>
...