Prism 的 INavigationParameters 的本地毛伊岛等效项?

问题描述 投票:0回答:1

目前正在致力于将我们的移动应用程序从 xamarin 重构为 maui。在xamarin应用程序中,我们使用prism进行导航,但我们想停止使用prism。对于导航,我们遵循 Max Borrmanns 的方法,在移动到页面后触发 OnAppearing 函数:https://learn.microsoft.com/en-us/answers/questions/1186365/net-maui-viewmodel-alternative-to -出现时

在 Prism 中,它们有一个名为 OnNavigateTo 的函数,其功能类似,但也将 INavigationParameters 作为输入。所以在 prism 中,当导航到页面时,会调用以下内容:

public async void OnNavigatedTo(INavigationParameters parameters)

OnNavigedTo 被调用,我们不必显式定义任何参数,它们只是在调用时可用。作为替代,我正在考虑做这样的事情:

public async void OnAppearing(Dictionary<String, Object> parameters)

这种方法的问题在于必须手动定义参数,这意味着我们实际上并没有使用任何导航参数,因为我们不断创建新参数。有毛伊岛本地的方法可以做到这一点吗?

c# refactoring maui prism
1个回答
0
投票

Shell 的

GoToAsync()
提供了传递
Dictionary<string, object>
的可能性:https://learn.microsoft.com/dotnet/maui/fundamentals/shell/navigation?view=net-maui-8.0#pass-data。然后,您的 ViewModel 需要实现
IQueryAttributable
。这将是使用 Shell 的“原生”MAUI 方式。

页码:

public class SomePage : ContentPage
{
    private readonly SomeViewModel _vm;

    public SomePage(SomeViewModel vm)
    {
        _vm = vm;
    }
}

视图模型:

public class SomeViewModel : ObservableObject, IQueryAttributable
{
    [ObservableProperty]
    private SomeModel _myModel;

    public void ApplyQueryAttributes(IDictionary<string, object> query)
    {
        MyModel = query["model"] as SomeModel;
    }
}

注册页面:

Routing.RegisterRoute("SomePage", typeof(SomePage));

导航:

await Shell.Current.GoToAsync("SomePage", new Dictionary<string,object>
{
    { "model", new SomeModel() }
});
© www.soinside.com 2019 - 2024. All rights reserved.