xamarin 禁用ListViewMenu中的HomeMenuItems

ssgvzors  于 2023-04-27  发布在  其他
关注(0)|答案(1)|浏览(113)

我正在Xamarin中创建一个菜单。我想禁用所有MenuItemType.None的菜单项。对于用户选择,应该禁用/跳过这些项。(MenuItemType.None的项应该“充当标题”
我有以下代码:

MainPage RootPage { get => Application.Current.MainPage as MainPage; }
    List<HomeMenuItem> menuItems;
    object lastSelectedItem = null;

    public MenuPage()
    {
        InitializeComponent();

        menuItems = new List<HomeMenuItem>
        {
            new HomeMenuItem {Id = MenuItemType.None, Title = "N" },
            new HomeMenuItem {Id = MenuItemType.A, Title="A" },
            new HomeMenuItem {Id = MenuItemType.B, Title="B" },
            new HomeMenuItem {Id = MenuItemType.C, Title="C" },
            new HomeMenuItem {Id = MenuItemType.D, Title="D" },
            new HomeMenuItem {Id = MenuItemType.E, Title="E" },
            new HomeMenuItem {Id = MenuItemType.F, Title="F" }
        };
        

        ListViewMenu.ItemsSource = menuItems;      

        ListViewMenu.SelectedItem = menuItems[1];
        ListViewMenu.ItemSelected += async (sender, e) =>
        {
            if (e.SelectedItem == null)
                return;

            var id = (int)((HomeMenuItem)e.SelectedItem).Id;

            if (id == (int)MenuItemType.None)
                return;

            await RootPage.NavigateFromMenu(id);
        };
    }

EDIT 1:我试过这样做,但我不知道如何访问集合项:

for (int i = 0; i < ((List<HomeMenuItem>)ListViewMenu.ItemsSource).Count; i++)
        {
            if (((List<HomeMenuItem>)ListViewMenu.ItemsSource)[i].Id == MenuItemType.None)
            {
                ?.isEnabled = false;
            }
        }

EDIT2:MenuPage.xaml

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="Sts.Views.MenuPage"
             Title="Menu">
    <StackLayout VerticalOptions="FillAndExpand">
        <ListView x:Name="ListViewMenu"
                    HasUnevenRows="True">
            <ListView.ItemTemplate>
                <DataTemplate>
                    <ViewCell>
                        <Grid Padding="10">
                            <Image Source="" /><Label Text="{Binding Title}" FontSize="20"/>
                        </Grid>
                    </ViewCell>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>
    </StackLayout>
</ContentPage>
rqmkfv5c

rqmkfv5c1#

没有一个这样的方法可以禁用ListView的一个项。
具有MenuItemType的项。无项应“充当标头”
可以将MenuItemType.None的项放到ListView的头中,并将其他项作为ListView的项源。
另外,当用户选择MenuItemType.None的项目时,也可以将SelectedItem设置为null。例如:

ListViewMenu.ItemSelected += async (sender, e) =>
        {
            if (e.SelectedItem == null)
                return;

            var id = (int)((HomeMenuItem)e.SelectedItem).Id

            if (id == (int)MenuItemType.None)
              {
                e.SelectedItem == null;
                return;
              }
            await RootPage.NavigateFromMenu(id);
        };

相关问题