AutoProperties 不适用于棱镜中的 DelegateCommand.ObservesCanExecute?

AutoProperties doesn't work with DelegateCommand.ObservesCanExecute in prism?

Prism 中的 DelegateCommand 上的 ObservesCanExecute 有一些我不明白的内容。 它与 AutoProperties 有一些关系……我认为

我有一个带有按钮的视图,该按钮绑定到我的视图模型中的 DelegateCommand。 出于某些原因,在我看来,我捕获了这样的 CanExecuteChanged 事件:

MyButton.Command.CanExecuteChanged += Command_CanExecuteChanged;

问题是,在我的视图模型中,当我使用自动属性声明 IsEnabled 时,视图中的事件没有被触发。就像 ObservesCanExecute 不再起作用一样。正常吗?我做错了什么吗?我认为 AutoProperties 和 Properties 完全一样...... 这是我的视图模型:

public class MainPageViewModel : ViewModelBase
{
    // VERSION 1 - It Works
    private bool _isEnabled = true;
    public bool IsEnabled
    {
        get { return _isEnabled; }
        set { SetProperty(ref _isEnabled, value); }
    }

    // VERSION 2 - Don't works
    // public bool IsEnabled {get; set; } = true;

    public DelegateCommand MyCommand { get; set; } = null;

    public MainPageViewModel(INavigationService navigationService)
        : base(navigationService)
    {
        Title = "Main Page";
        MyCommand = new DelegateCommand(Execute).ObservesCanExecute(() => IsEnabled);
    }

    private void Execute()
    {
        IsEnabled = !IsEnabled;
    }
}

ObservesCanExecuteChanged 依赖于包含观察到的 属性.

的 class 的 INotifyPropertyChanged

这会在发生更改时引发事件,因此有效

private bool _isEnabled = true;
public bool IsEnabled
{
    get { return _isEnabled; }
    set { SetProperty(ref _isEnabled, value); }
}

虽然这不会引发任何事件并且不起作用,正如您观察到的那样:

public bool IsEnabled { get; set; }

I thought that AutoProperties and Properties were exactly the same

这完全是错误的。 "AutoProperty" 是 "Property",但仅此而已。它们可能从 class 的外部看起来很相似,但是 属性 可以做任何事情,而 auto 属性 只是一个过于复杂的领域。