WPF 按钮绑定到 ICommand 不会触发

问题描述

我有一个绑定到 ICommand 接口的 Button,但是当我运行应用程序时它没有被触发。

当应用运行时,按钮应该被禁用,在 ICommand 或 CanUpdate 中放置一个断点,但它没有被点击。

就我所见,ICommand 似乎已正确实施 - 为简单起见,已替换 CanUpdate 中的值...

抓着我的头锻炼缺少什么?....

XAML

  <StackPanel Orientation="Horizontal" Grid.Row="1" Grid.Column="1">                          
  <RadioButton Width="64" IsChecked="{Binding Passed}"  GroupName="T1">Yes</RadioButton> 
    
   <RadioButton Width="64" IsChecked="{Binding Passed,Converter={StaticResource InverseBoolRadioConverter}}" GroupName="T1" >No</RadioButton>
 </StackPanel >

    Button Command="{Binding UpdateHasPassed}" Content="Update"></Button>

代码隐藏:-

private RelayCommand hasPassed;

public bool Passed
{
        get
        {
            return passed;
        }
        set
        {       
            if (passed !=value )
            {
                passed = value;
                OnPropertyChanged();
            }
        }
}

public ICommand HasPassed
{
    get
    {
        if (hasPassed == null)
        {
            haspassed = new RelayCommand( param => CanUpdate());
        }

        return haspassed;
    }
}

 private bool CanUpdate()
 {
    return (1 != 2)
 }

解决方法

您在研究 INotifyPropertyChanged 方面走在正确的轨道上。我还建议阅读 WPF 数据绑定、ICommand 接口(特别是创建 RelayCommand,稍后会详细介绍)和 MVVM 设计。

WPF 数据绑定和 ICommand 的好处是您可以根据您的条件标准(即名称已从其原始值更改)控制何时启用或禁用按钮。有了这里提到的技巧,你应该能够在短时间内做你想做的事。只需在 google 上搜索每个主题,您就会得到所需的内容。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...