Я начал новый проект в кроссплатформенных формах xamarin, я выбрал «master-detail» в качестве шаблона. Итак, как вы можете видеть, шаблон на MainPage.xaml использует MenuPage для меню в левой части экрана и «product» для основного содержимого.
<MasterDetailPage.Master>
<views:MenuPage />
</MasterDetailPage.Master>
<MasterDetailPage.Detail>
<NavigationPage>
<NavigationPage.Icon>
<OnPlatform x:TypeArguments="FileImageSource">
<On Platform="iOS" Value="tab_feed.png"/>
</OnPlatform>
</NavigationPage.Icon>
<x:Arguments>
<views:Product />
</x:Arguments>
</NavigationPage>
</MasterDetailPage.Detail>
навигация используя опции меню слева, все работает как запланировано. Однако я добавил изображение корзины для покупок на панель инструментов Элементы на странице продукта.
<ContentPage.ToolbarItems>
<ToolbarItem Name="ImageShoppingCart" Icon="shoppingcart.png" Priority="0" Order="Primary" Activated="ShoppingCartIs_Clicked"/>
</ContentPage.ToolbarItems>
Итак, со страницы продукта можно c нажать кнопку «покупки», которая находится в списке в MenuPage
<StackLayout VerticalOptions="FillAndExpand">
<ListView x:Name="ListViewMenu" HasUnevenRows="True">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Label Text="{Binding Title}" FontSize="20" Grid.Column="1" Grid.Row="0"/>
</Grid>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</StackLayout>
Я спрашиваю об этом, потому что я пробовал обойти страницу product.cs. Вызов ShoppingCartIs_Clicked при щелчке по корзине:
private async void ShoppingCartIs_Clicked(object sender, EventArgs e)
{
await RootPage.NavigateFromMenu(1);//1 being the id of shopping cart, which is then used to create a new Navigation page(shopping cart) and set master 'Detail' to this page
}
Итак. Это работает, и отображается страница корзины покупок. однако, когда вы нажимаете на меню слева. исходный «продукт», который является первым параметром в меню, все еще выделен. Итак, как я могу выделить заголовок корзины покупок в меню? Могу ли я каким-то образом сделать listview глобальным в меню и вызвать его на странице продуктов?
ListViewMenu.SelectedItem = menuItems[1];
Это, вероятно, закончилось kill, но я установил глобальную переменную 'newPage', и если она установлена в Menupage, затем установите selectedItem
private async void ShoppingCartIs_Clicked(object sender, EventArgs e)
{
App.NewPageToLoad = "Shopping";
MenuPage tempMenu = new MenuPage();
await RootPage.NavigateFromMenu(1);
}
// затем в menyuPage
if (App.NewPageToLoad != null)
{
if (App.NewPageToLoad.Contains("Shopping"))
{
ListViewMenu.SelectedItem = menuItems[1];
}
}
это не выделяет значок «покупки» в списке меню.
есть ли более простой способ сделать это? Спасибо
![enter image description here](https://i.stack.imgur.com/SlUxX.png)
ОБНОВЛЕНИЕ Спасибо @Junior за помощь, но, к сожалению, мы еще этого не сделали. Я пробовал то, что вы предложили, и не сработало.
Итак, я попытался использовать ListViewMenu.SelectedItem = menuItems[1];'
для теста, чтобы вручную установить «покупки», как выбрано, когда приложение загружается изначально, и это работает ... Однако я попробуйте повторно назначить его, как вы предложили в Flayout (MenuPage), но он не обновлен в приложении.
Также стоит отметить в качестве теста при перезагрузке MenuPage. Я изменил ListView, чтобы он был заполнен новым списком menuItems2, в котором я изменил заголовки, включив в него «2», однако при загрузке приложения оно показало предыдущий список. Получается, что ListView не заполняется должным образом при загрузке нового MenuPage? Это объясняет, почему ListViewMenu.SelectedItem = menuItems[3];
не выделяет другой заголовок в меню? хотя код работает так неуверенно, почему он не работает. также подумал, что мне может потребоваться сбросить главную страницу, которая перезагрузит ее с fre sh, это не сработало, либо спасибо за вашу помощь, пока
menuItems2 = new List<HomeMenuItem>
{
new HomeMenuItem {Id = MenuItemType.Products, Title="Products 2", Icon = "back_nav.png", Name = "test" },
new HomeMenuItem {Id = MenuItemType.Shopping, Title="Shopping Cart 2", Icon = "back_nav.png"},
new HomeMenuItem {Id = MenuItemType.Browse, Title="Browse 2", Icon = "back_nav.png"},
new HomeMenuItem {Id = MenuItemType.About, Title="About 2", Icon = "back_nav.png"},
};
ListViewMenu.ItemsSource = menuItems2;
ListViewMenu.SelectedItem = menuItems[3];