.NET MAUI Shell路由异常:点击按钮无响应且应用崩溃求助
.NET MAUI路由跳转无响应问题
我正在跟随教程学习.NET MAUI,按步骤配置路由后,主页面的按钮调用TapGestureRecognizer_Tapped事件处理方法跳转至HomePage时,应用先是无响应,随后提示"PizzaMAUI isn't responding"。我期望通过该按钮正常跳转到HomePage。
MainPage.xaml.cs
namespace PizzaMAUI.Pages; public partial class MainPage : ContentPage { public MainPage() { InitializeComponent(); } async void TapGestureRecognizer_Tapped(System.Object sender, Microsoft.Maui.Controls.TappedEventArgs e) { await Shell.Current.GoToAsync($"//HomePage"); } }
AppShell.xaml
<ShellContent Title="" ContentTemplate="{DataTemplate pages:MainPage}" Route="MainPage" /> <ShellContent Title="Home" ContentTemplate="{DataTemplate pages:HomePage}" Route="HomePage" />
MauiProgram.cs
using Microsoft.Extensions.Logging; namespace PizzaMAUI; public static class MauiProgram { public static MauiApp CreateMauiApp() { var builder = MauiApp.CreateBuilder(); builder .UseMauiApp<App>() .ConfigureFonts(fonts => { fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular"); fonts.AddFont("OpenSans-Semibold.ttf", "OpenSansSemibold"); }); #if DEBUG builder.Logging.AddDebug(); #endif builder.Services.AddSingleton<MainPage>(); AddPizzaServices(builder.Services); return builder.Build(); } private static void AddPizzaServices(IServiceCollection services) { services.AddSingleton<PizzaService>(); services.AddSingleton<HomePage>(); services.AddSingleton<HomeViewModel>(); services.AddSingleton(provider => new HomeViewModel(provider.GetRequiredService<HomePage>())); } }
HomePage.xaml.cs
namespace PizzaMAUI.Pages { public partial class HomePage : ContentPage { private readonly HomeViewModel _homeViewModel; public HomePage(HomeViewModel homeViewModel) { InitializeComponent(); _homeViewModel = homeViewModel; this.BindingContext = _homeViewModel; } } }
HomeViewModel.cs
namespace PizzaMAUI.ViewModel { public partial class HomeViewModel : ObservableObject { private readonly PizzaService _pizzaService; private HomePage homePage; public HomeViewModel(PizzaService pizzaService) { _pizzaService = pizzaService; Pizzas = new(_pizzaService.GetPopularPizzas()); } public HomeViewModel(HomePage homePage) { this.homePage = homePage; } public ObservableCollection<Pizza> Pizzas { get; set; } } }
AppShell.xaml.cs
namespace PizzaMAUI; public partial class AppShell : Shell { public AppShell() { InitializeComponent(); Routing.RegisterRoute(nameof(HomePage), typeof(HomePage)); Routing.RegisterRoute(nameof(MainPage), typeof(MainPage)); } }
Pizza.cs
using System; using CommunityToolkit.Mvvm.ComponentModel; namespace PizzaMAUI.Models { public partial class Pizza : ObservableObject { public string Name { get; set; } public string Image { get; set; } public double Price { get; set; } [ObservableProperty, NotifyPropertyChangedFor(nameof(Amount))] private int _cartQuantity; public double Amount => CartQuantity * Price; public Pizza Clone() => MemberwiseClone() as Pizza; } }
PizzaService.cs
using PizzaMAUI.Models; namespace PizzaMAUI.Services { public class PizzaService { private readonly static IEnumerable<Pizza> _pizzas = new List<Pizza> { new Pizza { Name = "Pizza 1", Image = "pizza1", Price = 1.45 }, new Pizza { Name = "Pizza 2", Image = "pizza2", Price = 2.45 }, new Pizza { Name = "Pizza 3", Image = "pizza3", Price = 4.34 }, new Pizza { Name = "Pizza 4", Image = "pizza4", Price = 3.5 }, new Pizza { Name = "Pizza 5", Image = "pizza5", Price = 7.45 }, new Pizza { Name = "Pizza 6", Image = "pizza6", Price = 1.5 }, new Pizza { Name = "Pizza 7", Image = "pizza7", Price = 6.5 }, new Pizza { Name = "Pizza 8", Image = "pizza8", Price = 7.77 } }; public IEnumerable<Pizza> GetAllPizzas() => _pizzas; public IEnumerable<Pizza> GetPopularPizzas(int count =6) => _pizzas.OrderBy(p=> Guid.NewGuid()).Take(count); public IEnumerable<Pizza> GetPizzas(string searchTerm) => string.IsNullOrWhiteSpace(searchTerm) ? _pizzas : _pizzas.Where(p => p.Name.Contains(searchTerm, StringComparison.OrdinalIgnoreCase)); } }
内容的提问来源于stack exchange,提问作者Tugba Dokumaci
相关产品推荐
相关产品推荐

