You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 23:20:56