gpt4 book ai didi

c# - 如何使用 CanExecuteChanged 事件管理器

转载 作者:行者123 更新时间:2023-11-30 17:50:43 25 4
gpt4 key购买 nike

我不知道如何使用 CanExecuteChangedEventManagerMyCommand : ICommand 中。我尝试了以下但 value 是错误的类型:

public event EventHandler CanExecuteChanged
{
add
{
CanExecuteChangedEventManager.AddHandler(this, value);
}
remove
{
CanExecuteChangedEventManager.RemoveHandler(this, value);
}
}

我正在编写的类将如下所示,但如果可能的话不会泄漏:

public class ManualRelayCommand : ICommand
{
// CanExecute() and Execute() excluded
public event EventHandler CanExecuteChanged;

public virtual void RaiseCanExecuteChanged()
{
var handler = CanExecuteChanged;
if (handler != null)
{
Application.Current.Dispatcher.InvokeAsync(() => handler(this, EventArgs.Empty));
}
}
}

最佳答案

CanExecuteChangedEventManager 是一个支持弱事件模式的类。控件开发人员使用弱事件是很常见的,因为您希望控件不具有对数据的强引用。

CanExecuteChangedEventManager是这样使用的。

 public event EventHandler<EventArgs> CanExecuteChanged
{
add
{
CanExecuteChangedEventManager.AddHandler(this, value);
}
remove
{
CanExecuteChangedEventManager.RemoveHandler(this, value);
}
}

你需要EventHandler<EventArgs>就是这样。

如果您对此仍有疑问,请随时提问:)

编辑:

您不是在创建控件,您只是在创建一个继承自 ICommand 的 RelayCommand。

你不需要 CanExecuteChangedEventManager .

当您从 ICommand 继承时你必须实现 public event EventHandler CanExecuteChanged;

你可以让它保持原样而不改变它。你不改变PropertyChanged事件是你吗?只要让它在那里,它就会神奇地工作。

允许命令的控件知道如何订阅该事件。就像来自 INotifyPropertyChanged 接口(interface)的 PropertyChanged 事件一样。 :)

关于c# - 如何使用 CanExecuteChanged 事件管理器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20420581/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com