【问题标题】:How to change bool property using button click?如何使用按钮单击更改布尔属性?
【发布时间】:2020-01-29 11:34:57
【问题描述】:

我正在使用Button 来更改我的IsSelected 属性。我正在使用MVVM LightViewModelBase 来引发 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>

如果我使用ToggleButtonIschecked 属性,这组代码可以成功运行。此代码对按钮有效EXCEPT。我想我错过了一些东西。

【问题讨论】:

  • 你有异常吗?编译器错误?命令如何知道将属性设置为什么?
  • ToggleButton.IsChecked 是一个布尔属性,所以绑定一个布尔 VM 属性在那里工作......Button.Commind 是一个ICommand 属性,所以你不能指望布尔值在那里工作。问:既然你已经发现了ToggleButton,为什么不用呢?
  • 首先:您是否收到任何错误消息?是运行时错误还是编译错误?那么:按钮命令没有布尔参数。如果您想切换每次点击,您需要额外的代码。 ToggleButton 通过将您的视图模型绑定到的布尔属性为您做到这一点。换句话说:您正在尝试将方形块放入圆孔中。
  • @Fildor,我已经回答了你,我没有收到任何错误,无论是运行时还是编译。仅此而已,它显然不起作用。单击时按钮会产生涟漪,但什么也没有。

标签: c# mvvm mvvm-light


【解决方案1】:

您的ICommand 实现是错误的,@Fildor 在链接this question 的 cmets 中也指出,这帮助我想出了这个答案。

Model中,需要将RelayCommandViewButton绑定。

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)
}

然后绑定这个RelayCommandIsSelectedCommand,而不是直接绑定你的IsSelected到你的视图中的Button

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-13
    • 2019-12-02
    • 1970-01-01
    • 2016-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多