我有以下XAML
<ContentPage.ToolbarItems>
<ToolbarItem x:Name="tbiEdit" Text="Edit" Order="Primary" Priority="1" Command="{Binding ToggleEditCommand}">
<ToolbarItem.Icon>
<OnPlatform x:TypeArguments="FileImageSource">
<On Platform="Android" Value="ic_edit_white_24dp.png"/>
<On Platform="UWP" Value="Assets/Icons/ic_edit_dark_48dp.png"/>
</OnPlatform>
</ToolbarItem.Icon>
</ToolbarItem>
<ToolbarItem x:Name="tbiSave" Text="Save" Order="Primary" Priority="2" Command="{Binding SaveOrderCommand}">
<ToolbarItem.Icon>
<OnPlatform x:TypeArguments="FileImageSource">
<On Platform="Android" Value="ic_save_white_24dp.png"/>
<On Platform="UWP" Value="Assets/Icons/ic_save_dark_48dp.png"/>
</OnPlatform>
</ToolbarItem.Icon>
</ToolbarItem>
<ToolbarItem x:Name="tbiCopy" Text="Copy" Order="Secondary" Priority="3" Command="{Binding CopyOrderCommand}">
<ToolbarItem.Icon>
<OnPlatform x:TypeArguments="FileImageSource">
<On Platform="Android" Value="ic_content_copy_white_24dp.png"/>
<On Platform="UWP" Value="Assets/Icons/ic_content_copy_dark_48dp.png"/>
</OnPlatform>
</ToolbarItem.Icon>
</ToolbarItem>
<ToolbarItem x:Name="tbiDelete" Text="Delete" Order="Secondary" Priority="4" Command="{Binding DeleteOrderCommand}">
<ToolbarItem.Icon>
<OnPlatform x:TypeArguments="FileImageSource">
<On Platform="Android" Value="ic_delete_white_24dp.png"/>
<On Platform="UWP" Value="Assets/Icons/ic_delete_dark_48dp.png"/>
</OnPlatform>
</ToolbarItem.Icon>
</ToolbarItem>
</ContentPage.ToolbarItems>
在UWP上进行测试时,当绑定命令对象的ToolbarItem
返回canExecute
时,以及返回false
时,主要true
对象(编辑和保存)会正确显示为禁用状态},显示为已启用。对于辅助菜单中的两个辅助ToolbarItem
对象(删除和复制),这是相同的。
当我部署到我的Samsung Note8进行测试时,编辑和保存始终显示为启用状态。复制和删除在二级菜单中按预期显示。编辑和保存实际上并不执行操作,它只是外观。
我根本不熟悉Android,并且在这方面严重依赖于Xamarin.Forms,所以我想知道是否有一些我需要在Android方面专门做的事情才能拥有启用/禁用的外观根据绑定命令的canExecute
功能?
编辑(添加代码): 根据要求,保存和编辑命令代码。
private bool CanSave()
{
if (!IsVMInEditMode) return false;
if (!DisplaySaveWarning) return false;
if (string.IsNullOrWhiteSpace(Title)) return false;
if (string.IsNullOrWhiteSpace(Details)) return false;
if (Title.Length > 50) return false;
if (Details.Length > 1000) return false;
return true;
}
private bool CanToggleEdit()
{
if (_order == null) return false;
if (!_order.IsUserCreated) return false;
return true;
}