Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/282.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# Xamarin窗体Shell ToolbarItem未响应命令绑定_C#_Xaml_Xamarin.forms_Xamarin.android - Fatal编程技术网

C# Xamarin窗体Shell ToolbarItem未响应命令绑定

C# Xamarin窗体Shell ToolbarItem未响应命令绑定,c#,xaml,xamarin.forms,xamarin.android,C#,Xaml,Xamarin.forms,Xamarin.android,我正在将Xamarin Forms非Shell应用程序转换为Shell格式。我遇到一个问题,在ContentPage上定义的ToolbarItem在更改其可执行状态时没有响应绑定的命令。我通过在同一页面中添加标准按钮来验证这一点,并按照下面的xaml将它们绑定到相同的命令 <ContentPage.ToolbarItems> <ToolbarItem Text="Edit" Priority="1" Command="{Binding ToggleEditCommand

我正在将Xamarin Forms非Shell应用程序转换为Shell格式。我遇到一个问题,在
ContentPage
上定义的
ToolbarItem
在更改其可执行状态时没有响应绑定的
命令。我通过在同一页面中添加标准按钮来验证这一点,并按照下面的xaml将它们绑定到相同的
命令

<ContentPage.ToolbarItems>
    <ToolbarItem Text="Edit" Priority="1" Command="{Binding ToggleEditCommand}" Order="Primary"
                 Icon="{OnPlatform Android=ic_edit_white_24dp.png, UWP=Assets/Icons/ic_edit_dark_48dp.png}"/>
    <ToolbarItem Text="Save" Priority="2" Command="{Binding SaveItemCommand}" Order="Primary"
                 Icon="{OnPlatform Android=ic_save_white_24dp.png, UWP=Assets/Icons/ic_save_dark_48dp.png}"/>
    <ToolbarItem Text="Copy" Priority="3" Command="{Binding CopyItemCommand}" Order="Secondary"
                 Icon="{OnPlatform Android=ic_content_copy_white_24dp.png, UWP=Assets/Icons/ic_content_copy_dark_48dp.png}"/>
    <ToolbarItem Text="Delete" Priority="4" Command="{Binding DeleteItemCommand}" Order="Secondary"
                 Icon="{OnPlatform Android=ic_delete_white_24dp.png, UWP=Assets/Icons/ic_delete_dark_48dp.png}"/>

</ContentPage.ToolbarItems>
<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="auto"/>
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>
    <StackLayout>
        <Button Text="edit" Command="{Binding ToggleEditCommand}"/>
        <Button Text="Save" Command="{Binding SaveItemCommand}"/>
        <Button Text="Copy" Command="{Binding CopyItemCommand}"/>
        <Button Text="Delete" Command="{Binding DeleteItemCommand}"/>
    </StackLayout>
    <editviews:GameActionEditView IsVisible="{Binding IsVMInEditMode}" Grid.Row="1"/>
    <Grid IsVisible="{Binding IsVMInViewMode}" Grid.Row="1">
        <viewonly:GameActionView BindingContext="{Binding SelectedGameAction}"/>
    </Grid>
PropertyChanged侦听器调用Can Execute方法

protected override void OnPropertyChanged(PropertyChangedEventArgs e)
    {
        base.OnPropertyChanged(e);
        switch (e.PropertyName)
        {
            case "Title":
            case "Effect":
            case "SelectedActionCost":
                HasUnsavedChanges = CheckForUnsavedChanges();
                SaveItemCommand.ChangeCanExecute();
                break;
            case "IsVMInEditMode":
                IsVMInViewMode = !IsVMInEditMode;
                CopyItemCommand.ChangeCanExecute();
                SaveItemCommand.ChangeCanExecute();
                DeleteItemCommand.ChangeCanExecute();
                ToggleEditCommand.ChangeCanExecute();
                break;
        }
    }
最后,可以执行save命令的方法

protected override bool CanSaveItem()
    {
        if (!IsVMInEditMode) return false;
        if (string.IsNullOrWhiteSpace(Title)) return false;
        if (string.IsNullOrWhiteSpace(Effect)) return false;
        if (Title.Length > 40) return false;
        if (Effect.Length > 1000) return false;
        if (SelectedActionCost == null) return false;
        return true;
    }
**编辑2:添加回购链接**
我已经成功地在VisualStudio(2019,v16.4.0)的Shell模板中复制了这个问题。可以找到Repo

我们可以看看你的虚拟机代码吗?我也想看看你的虚拟机代码。我不能在我这方面重复这个问题。从第二张gif来看,工具栏项似乎已被禁用。@JackHua MSFT我已经添加了视图模型中我认为相关的部分,考虑到帖子的大小。让我知道,如果你想要任何进一步的帮助。好的,我只是测试的样本,发现它只发生在Android端。如果我将_state的默认值更改为true,它也可以正常工作。如果我找到任何解决方案,我会更新你。另外,有人制造了一个问题。我们可以看看你的虚拟机代码吗?我也想看看你的虚拟机代码。我不能在我这方面重复这个问题。从第二张gif来看,工具栏项似乎已被禁用。@JackHua MSFT我已经添加了视图模型中我认为相关的部分,考虑到帖子的大小。让我知道,如果你想要任何进一步的帮助。好的,我只是测试的样本,发现它只发生在Android端。如果我将_state的默认值更改为true,它也可以正常工作。如果我找到任何解决方案,我会通知你。另外,有人制造了一个问题。
protected override bool CanSaveItem()
    {
        if (!IsVMInEditMode) return false;
        if (string.IsNullOrWhiteSpace(Title)) return false;
        if (string.IsNullOrWhiteSpace(Effect)) return false;
        if (Title.Length > 40) return false;
        if (Effect.Length > 1000) return false;
        if (SelectedActionCost == null) return false;
        return true;
    }