gpt4 book ai didi

c# - 禁用 ToolbarItem Xamarin.Forms

转载 作者:IT王子 更新时间:2023-10-29 04:49:22 27 4
gpt4 key购买 nike

我的页面中有以下内容:

<ContentPage.ToolbarItems>
<ToolbarItem Text="Run" Command="{Binding RunCommand}" />
</ContentPage.ToolbarItems>

该命令启动一个异步任务。只要异步任务仍在运行,我就会尝试通过将其绑定(bind)到 bool 属性来禁用该控件,如下所示:

<ContentPage.ToolbarItems>
<ToolbarItem Text="Run" Command="{Binding RunCommand}" IsEnabled="{Binding MyBoolProperty}" />
</ContentPage.ToolbarItems>

我的问题是 ToolbarItem 似乎没有“IsEnabled”属性。有没有办法使用 Xamarin.Forms 实现我想要做的事情?

最佳答案

在 William 和 Xamarin 支持的帮助下,我终于能够找到功能的工作原理。

这有点违反直觉,因为我们希望启用/禁用按钮 (ToolbarItem),但实际上我们必须管理绑定(bind)到按钮的命令的状态。一旦我们理解了这种模式,它就有意义了。

ICommand 类型的 Command 对象具有 CanExecute 属性(感谢 William 指出)现在你不想直接访问/使用它,除非它是为了实际检查命令是否可以执行。

在代码中任何您认为合适的地方,要更改命令的状态,您需要添加以下行:

((Command)_myCommand).ChangeCanExecute();

此行将强制为指定命令重新评估 CanExecute 属性。

我个人决定将它添加到我跟踪不活动的地方,因为它在我的应用程序中有意义。

public bool Inactive { 
get {
return _inactive;
}
set {
if (_inactive != value) {
_inactive = value;
((Command)_myCommand).ChangeCanExecute();
OnPropertyChanged ();
}
}
}

在 View 中,没有需要注意的变化:

<ToolbarItem Text="Run" Command="{Binding MyCommand}" />

现在,当您创建 Command 对象时,将完成大量工作。我们通常使用单参数构造函数,因为它通常就足够了,而且它是我们定义命令功能的地方。有趣的是,还有一个 2 参数构造函数,您可以在其中提供确定 CanExecute 属性值的函数/操作。

_myCommand = new Command (async () => {
Inactive = false;
await Run();
Inactive = true;
},
() => {
return Inactive;
});


public ICommand MyCommand {
get {
return _myCommand;
}
}

编辑:我知道您应该在 Run() 中从技术上更改 Inactive 的值,但出于演示目的...

关于c# - 禁用 ToolbarItem Xamarin.Forms,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27803038/

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