问题是,使用GoToAsync与Dictionary相结合,最终在我导航到的页面上接收到null对象。我只是卡住了......
有趣的是,也许是一个很好的提示。我在GoToAsync上有一个断点,在执行时,我的对象包含我需要的数据。下一个断点在我导航到的页面上的构造函数上,在那个断点之后,我的对象变为null。
路由设置正确。
GoToAsync:
private async void ListView_ItemTapped(object sender, ItemTappedEventArgs e)
{
var salons = e.Item as Salons;
await Shell.Current.GoToAsync("TemplateSalonPage", true, new Dictionary<string, object>
{
{"Salons", salons }
});
我导航到页面的Viewmodel:
ing xxx.Models;
using xxx.Views;
using Microsoft.Maui.Controls;
using System.Collections.ObjectModel;
namespace xxx.ViewModels;
[QueryProperty(nameof(Salons), "Salons")]
public partial class TemplateSalonViewModel : BaseViewModel
{
public TemplateSalonViewModel()
{
}
[ObservableProperty]
Salons salon;
}
查看接收方的**.xaml**:
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="xxx.Views.TemplateSalonPage"
xmlns:model="clr-namespace:xxx.Models"
xmlns:viewModels="clr-namespace:xxx.ViewModels"
x:DataType="viewModels:TemplateSalonViewModel" Shell.NavBarIsVisible="False" Shell.TabBarIsVisible="False">
<StackLayout HorizontalOptions="FillAndExpand">
<VerticalStackLayout>
<Label Text="{Binding Salon.id}"
FontSize="Large"
FontAttributes="Bold"
VerticalOptions="Center"
BackgroundColor="Yellow"
TextColor="Black"
HeightRequest="150"/>
</VerticalStackLayout>
</StackLayout>
</ContentPage>
尝试了命名我的对象,字典的任何可能的变化,但找不到问题。绑定工作,因为我能够附加在视图中。
1条答案
按热度按时间nqwrtyyt1#
您误解了
[QueryProperty(nameof(Salons), "Salons")]
,在您的代码中,属性名是salon,因为您使用了[ObservableProperty]
,所以salon将被声明为Salon。因此,视图模型应该是:
在xaml中,您还需要使用
Salon.Id
.sich作为:有关更多信息,您可以参考有关ObservableProperty attribute的官方文档。
我用CommunityToolkit.Mvvm nuget包创建了一个示例:
视图模型:
Model类:
然后使用Shell.Current.后藤():
和页面.xaml: