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 属性 只是一个过于复杂的领域。
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
依赖于包含观察到的 属性.
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 属性 只是一个过于复杂的领域。