Los*_*oon 18 c# xaml xamarin xamarin.forms
我的页面中有以下内容:
<ContentPage.ToolbarItems>
<ToolbarItem Text="Run" Command="{Binding RunCommand}" />
</ContentPage.ToolbarItems>
Run Code Online (Sandbox Code Playgroud)
该命令启动异步任务.我试图禁用控件,只要异步任务仍在运行,方法是将它绑定到布尔属性,如下所示:
<ContentPage.ToolbarItems>
<ToolbarItem Text="Run" Command="{Binding RunCommand}" IsEnabled="{Binding MyBoolProperty}" />
</ContentPage.ToolbarItems>
Run Code Online (Sandbox Code Playgroud)
我的问题是ToolbarItem似乎没有"IsEnabled"属性.有没有办法实现我尝试使用Xamarin.Forms做什么?
Los*_*oon 18
在William和Xamarin支持的帮助下,我终于能够找到功能如何工作.
我们希望启用/禁用按钮(ToolbarItem),这有点反直觉,但实际上我们必须管理绑定到按钮的命令的状态.一旦我们理解了这种模式,就有意义了.
ICommand类型的Command对象具有CanExecute属性(感谢William指出它)现在您不想直接访问/使用它,除非它实际检查命令是否可以执行.
只要您认为代码适合,要更改命令的状态,您需要添加以下行:
((Command)_myCommand).ChangeCanExecute();
Run Code Online (Sandbox Code Playgroud)
此行将强制为指定的命令重新评估CanExecute属性.
我个人决定将它添加到跟踪不活动的地方,因为它在我的应用程序中是有意义的.
public bool Inactive {
get {
return _inactive;
}
set {
if (_inactive != value) {
_inactive = value;
((Command)_myCommand).ChangeCanExecute();
OnPropertyChanged ();
}
}
}
Run Code Online (Sandbox Code Playgroud)
在视图中,没有任何变化需要注意:
<ToolbarItem Text="Run" Command="{Binding MyCommand}" />
Run Code Online (Sandbox Code Playgroud)
现在,当您创建Command对象时,将完成大量工作.我们通常使用单个参数构造函数,因为它通常是足够的,它是我们定义命令的作用的地方.有趣的是,还有一个2参数构造函数,您可以在其中提供确定CanExecute属性值的函数/操作.
_myCommand = new Command (async () => {
Inactive = false;
await Run();
Inactive = true;
},
() => {
return Inactive;
});
public ICommand MyCommand {
get {
return _myCommand;
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:我知道你在技术上改变Inactive的值应该在Run()中发生,但出于演示目的......
归档时间: |
|
查看次数: |
16541 次 |
最近记录: |