Dav*_*ugh 2 c# query-string maui
我已经完成了 .NET MAUI“创建 .NET MAUI 应用程序”启动教程。我对教程进行了一些修改,以使用 sqlite 数据库而不是 CollectionView 中每一行的文件。当他们在集合视图中编辑一行时,他们将该行的 DTO id 传递给新视图:
await Shell.Current.GoToAsync($"{nameof(NotePage)}?{nameof(NotePage.ItemId)}={SelectedNote.ID}");
Run Code Online (Sandbox Code Playgroud)
新视图使用以下注释加载 ItemID:
[QueryProperty(nameof(ItemId), nameof(ItemId))]
Run Code Online (Sandbox Code Playgroud)
然后,我使用该 ItemId 并对数据库进行另一次调用以返回 DTO,但由于我是从数据库加载数据,所以我已经从 CollectionView 中获得了 DTO,我只想将整个内容传递给新视图,如下所示某种查询参数来节省资源。我该怎么做呢?
我在网上看到有人提供了一个教程,显示可以这样通过:
await Shell.Current.GoToAsync(nameof(NotePage), SelectedNote);
Run Code Online (Sandbox Code Playgroud)
但是 Visual Studio 说我的第二个参数必须是 bool,所以我猜那些教程是错误的。
有人知道是否可以通过这种方式或类似的方式从视图传递 DTO?
谢谢,
文档演示了如何做到这一点
基于对象的导航数据可以通过指定 IDictionary<string, object> 参数的 GoToAsync 重载来传递:
Animal animal = e.CurrentSelection.FirstOrDefault() as Animal;
var navigationParameter = new Dictionary<string, object>
{
{ "Bear", animal }
};
await Shell.Current.GoToAsync($"beardetails", navigationParameter);
Run Code Online (Sandbox Code Playgroud)
那么接收页面或VM可以这样做
[QueryProperty(nameof(Bear), "Bear")]
public partial class BearDetailPage : ContentPage
{
Animal bear;
public Animal Bear
{
get => bear;
set
{
bear = value;
OnPropertyChanged();
}
}
public BearDetailPage()
{
InitializeComponent();
BindingContext = this;
}
}
Run Code Online (Sandbox Code Playgroud)