gpt4 book ai didi

c# - 附加命令

转载 作者:行者123 更新时间:2023-12-03 10:26:43 25 4
gpt4 key购买 nike

TL;DR 是否可以将异步可取消命令附加到 Parent-View-Model其中包含 child

我的问题是,我有一个 ViewModel对于 View显示“ WizardControl ”(类似于安装助手,您可以单击下一步进入下一个 View )
Wizard Control
Log in按钮是 Parent-View-Model 的一部分,并且为此按钮执行的命令必须是来自 Specific Page 的命令的组合。 (又名 child )和MainWindow (又名 parent )。

现在我正在 parent 的命令中执行 child 的命令:

ForwardCommand = new DelegateCommand(() =>
{
CancelEventArgs cea = new CancelEventArgs();
if (NextCommand != null)
{
NextCommand.Execute(null, cea));
if (!cea.Cancel)
{
//Go to next page
}
//Else stay on that page because an error occured while the command
}
},
(nul)=> {
if (NextCommand != null)
{
return true;
}
return NextCommand.CanExecute(nul);
});

这是可行的,只要包含命令不需要异步执行, Login 就是这种情况。 .因为随后会显示下一页,而无需用户登录以获取下一页所需的数据。 (登录时第一页会显示一个加载栏)。对于执行 Child-Command 时发生错误的情况正如您在代码中看到的那样,我实现了 CancelEventArgs。

提前致谢,
弗洛

PS。 The DelegateCommand是由 CancellationEventArgs 扩展的自制实现

编辑:
我在 Attached Commands 之前的实现是我在页面上有一个额外的“登录”按钮可以点击,并且只有在用户登录时才允许进入下一步,但这是糟糕的用户体验

最佳答案

为什么它必须是命令?如果您不想直接将登录功能绑定(bind)到按钮,请不要提供命令,使用方法:

ForwardCommand = new DelegateCommand( async () =>
{
if (await _currentlyShownWizardPage.DoYourStuffThatHappensWhenTheUserClicksNext())
GoToNextPage();
});

另一种方法是反过来构建它:将向导页面的命令绑定(bind)到下一个按钮(连同向导页面也提供的按钮内容),并让向导页面的命令将向导推进到下一页(通过 IWizard 提供给向导页面的服务)。

关于c# - 附加命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40628835/

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