首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在UWP中无法识别StartupUri

在UWP中无法识别StartupUri
EN

Stack Overflow用户
提问于 2020-01-04 03:09:07
回答 1查看 110关注 0票数 0

我在UWP中有一个MainPage,如下所示:

代码语言:javascript
复制
public sealed partial class MainPage : Page
{
    private MainViewModel _viewModel;

    public MainPage()
    {
        this.InitializeComponent();
        _viewModel = new MainViewModel(new MyDataService());
        DataContext = _viewModel;
        Loaded += MainWindow_Loaded;
    }

    private void MainWindow_Loaded(object sender, RoutedEventArgs e)
    {
        _viewModel.Load();
    }
}

我的window应用程序启动并运行时没有任何问题。

现在,我想将MainViewModel作为参数传递给MainPage。

代码语言:javascript
复制
public sealed partial class MainPage : Page
{
    private MainViewModel _viewModel;

    public MainPage(MainViewWindow mvw)
    {
        this.InitializeComponent();
        _viewModel = mvw;
        DataContext = _viewModel;
        Loaded += MainWindow_Loaded;
    }

    private void MainWindow_Loaded(object sender, RoutedEventArgs e)
    {
        _viewModel.Load();
    }
}

如何初始化参数并将其传递给MainPage?Universal Windows似乎不能像WPF那样识别App.xaml中的StartupUri

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-04 04:51:40

在UWP中,Page需要有一个无参数的构造函数。这是因为Frame.Navigate方法只接受页面的Type作为参数,并处理它的实例化。这是不幸的,有计划在未来的WinUI版本中改进这一点(这甚至是Prism不得不在较新版本中放弃对UWP支持的原因之一)。

现在,您需要保持构造函数无参数,并在构造函数完成后注入服务。

如果只需要传递简单的参数,可以使用Frame.Navigate(Type, object)方法。第二个参数是您的参数,您可以在覆盖Page.OnNavigatedTo方法时检索该参数。注意,参数类型只需要是简单类型(stringint等)因为它需要在应用程序挂起时在Frame的导航堆栈中自动序列化。如果需要,你可以使用JSON string来转换更复杂的参数。

许多MVVM框架可以帮你完成大部分繁重的工作,比如MvvmCross。它有一个非常好的内置IoC提供程序,可以为您做很多工作,包括管理视图模型生命周期以及通过命名约定匹配视图和视图模型。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59584027

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档