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,我已经回答过你了,我没有得到任何错误,无论是运行时还是编译时。只是,它显然不起作用。按钮在单击时会出现涟漪,但没有任何效果。请查看以下内容: