Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用异步lambda传递参数时,RelayCommand CanExecute不工作_C#_Wpf - Fatal编程技术网

C# 使用异步lambda传递参数时,RelayCommand CanExecute不工作

C# 使用异步lambda传递参数时,RelayCommand CanExecute不工作,c#,wpf,C#,Wpf,我有以下有效的命令: private ICommand\u AddNewCommand; 公共ICommand AddNewCommand { 得到 { 如果(_AddNewCommand==null) { _AddNewCommand=newrelaycommand(异步()=> { 等待AddNewAsync(); },添加新的命令和执行命令); } 返回_AddNewCommand; } } 根据AddNewCommand\u CanExecute方法结果,绑定到此按钮的按钮已正确启用/

我有以下有效的命令:

private ICommand\u AddNewCommand;
公共ICommand AddNewCommand
{
得到
{
如果(_AddNewCommand==null)
{
_AddNewCommand=newrelaycommand(异步()=>
{
等待AddNewAsync();
},添加新的命令和执行命令);
}
返回_AddNewCommand;
}
}
根据
AddNewCommand\u CanExecute
方法结果,绑定到此按钮的按钮已正确启用/禁用

但是,如果我想将一些参数传递到我的
AddNewAsync()
方法中,我会这样做:

\u AddNewCommand=newrelaycommand(异步obj=>
{
等待AddNewAsync(obj);
},AddNewCommand_CanExecute());
请注意,
AddNewCommand\u CanExecute
必须更改为
AddNewCommand\u CanExecute()

但是,执行此操作时,绑定按钮始终处于启用状态,即使
AddNewCommand\u CanExecute()
应返回false(假设两者之间没有更改)


这里发生了什么?

您正在使用
RelayCommand
的重载,该重载接受
keepTargetAlive
类型为
bool
的参数

您应该使用接受
Func
谓词的谓词:

_AddNewCommand = new RelayCommand<object>(async obj =>
{
    await AddNewAsync(obj);
}, _ => AddNewCommand_CanExecute());
\u AddNewCommand=newrelaycommand(异步obj=>
{
等待AddNewAsync(obj);
},=>AddNewCommand_CanExecute());

请共享其余的代码,
添加新命令并执行()
RelayCommand
实现我已经添加了剩余的
RelayCommand
。我没有添加
CanExecute
代码,因为它只是一个方法(
public bool AddNewCommand_CanExecute(){}
),带有一大堆与问题无关的逻辑,因为它在不将参数传递到命令时起作用,所以问题不在这里。@WSC:你忘了告诉我们“RelayCommand”类是如何实现的。这是最重要的。
RelayCommand
来自
Galasoft.Mvvmlight.CommandWpf
()。@WSC:那么您使用的重载是错误的。看看我的答案。哦,哇,我没有意识到
\u=>
完全改变了它使用的重载。我想,因为我在传递一个对象和bool,所以实际上我在使用
Func