UWP 无法识别 StartupUri
StartupUri not recognized in UWP
我在 UWP 中有这样一个主页:
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。
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
?通用 Windows 似乎无法像 WPF 那样识别 App.xaml
中的 StartupUri
。
在 UWP 中,Page
需要有一个无参数的构造函数。这样做的原因是 Frame.Navigate
方法仅将页面的 Type
作为参数,并处理其实例化。这很不幸,我们计划在未来的 WinUI 版本中对此进行改进(这甚至是 Prism 不得不在较新版本中放弃对 UWP 支持的原因之一)。
目前,您需要保持构造函数无参数并在构造函数完成后注入服务。
如果只需要传递简单的参数,可以使用Frame.Navigate(Type, object)
方法。第二个参数是您的参数,您可以在重写 Page.OnNavigatedTo
方法时检索该参数。请注意,参数类型只能是简单类型(string
、int
等),因为它需要在应用程序启动时在 Frame
的导航堆栈中自动序列化暂停。如有必要,您可以使用 JSON 字符串转换更复杂的参数。
许多 MVVM 框架可以为您完成大部分繁重的工作 - 例如 MvvmCross。这是一个非常好的设置,带有内置的 IoC 提供程序,可以为您完成很多工作,包括管理视图模型生命周期以及通过命名约定匹配视图和视图模型。
我在 UWP 中有这样一个主页:
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。
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
?通用 Windows 似乎无法像 WPF 那样识别 App.xaml
中的 StartupUri
。
在 UWP 中,Page
需要有一个无参数的构造函数。这样做的原因是 Frame.Navigate
方法仅将页面的 Type
作为参数,并处理其实例化。这很不幸,我们计划在未来的 WinUI 版本中对此进行改进(这甚至是 Prism 不得不在较新版本中放弃对 UWP 支持的原因之一)。
目前,您需要保持构造函数无参数并在构造函数完成后注入服务。
如果只需要传递简单的参数,可以使用Frame.Navigate(Type, object)
方法。第二个参数是您的参数,您可以在重写 Page.OnNavigatedTo
方法时检索该参数。请注意,参数类型只能是简单类型(string
、int
等),因为它需要在应用程序启动时在 Frame
的导航堆栈中自动序列化暂停。如有必要,您可以使用 JSON 字符串转换更复杂的参数。
许多 MVVM 框架可以为您完成大部分繁重的工作 - 例如 MvvmCross。这是一个非常好的设置,带有内置的 IoC 提供程序,可以为您完成很多工作,包括管理视图模型生命周期以及通过命名约定匹配视图和视图模型。