C# 如何使用按钮单击更改布尔属性?

C# 如何使用按钮单击更改布尔属性?,c#,mvvm,mvvm-light,C#,Mvvm,Mvvm Light,我正在使用按钮更改我的IsSelected属性。我正在使用的ViewModelBase引发PropertyChanged事件 型号 private bool _isSelected = true; public bool IsSelected { get { return _isSelected; } set { Set(IsSelected, ref _isSelected, value); Messen

我正在使用
按钮
更改我的
IsSelected
属性。我正在使用的
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
属性,这组代码将成功运行。除按钮外,此代码正常工作。我想我遗漏了一些东西。

你的
ICommand
实现是错误的,@Fildor在帮助我得出这个答案的链接评论中也指出了这一点

模型中,您需要将
RelayCommand
视图
按钮
绑定

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
IsSelected命令,而不是直接绑定视图中
按钮中的
IsSelected

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

您是否遇到异常情况?编译器错误?命令如何知道将属性设置为什么?
ToggleButton.IsChecked
是一个布尔属性,因此绑定布尔VM属性可以在那里工作
Button.Commind
是一个
ICommand
属性,因此不能期望布尔值在那里工作。问题:既然您已经发现了
切换按钮
,为什么不使用它呢?首先:您是否收到任何错误消息?是运行时错误还是编译错误?然后:按钮命令没有布尔参数。如果要在每次单击时切换一个选项,则需要其他代码。ToggleButton通过将viewmodel绑定到一个布尔属性来实现这一点。换言之:你在试图把一个正方形的块装进一个圆孔。@Fildor,我已经回答过你了,我没有得到任何错误,无论是运行时还是编译时。只是,它显然不起作用。按钮在单击时会出现涟漪,但没有任何效果。请查看以下内容: