我在UWP中有一个MainPage,如下所示:
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?Universal Windows似乎不能像WPF那样识别App.xaml中的StartupUri。
发布于 2020-01-04 04:51:40
在UWP中,Page需要有一个无参数的构造函数。这是因为Frame.Navigate方法只接受页面的Type作为参数,并处理它的实例化。这是不幸的,有计划在未来的WinUI版本中改进这一点(这甚至是Prism不得不在较新版本中放弃对UWP支持的原因之一)。
现在,您需要保持构造函数无参数,并在构造函数完成后注入服务。
如果只需要传递简单的参数,可以使用Frame.Navigate(Type, object)方法。第二个参数是您的参数,您可以在覆盖Page.OnNavigatedTo方法时检索该参数。注意,参数类型只需要是简单类型(string、int等)因为它需要在应用程序挂起时在Frame的导航堆栈中自动序列化。如果需要,你可以使用JSON string来转换更复杂的参数。
许多MVVM框架可以帮你完成大部分繁重的工作,比如MvvmCross。它有一个非常好的内置IoC提供程序,可以为您做很多工作,包括管理视图模型生命周期以及通过命名约定匹配视图和视图模型。
https://stackoverflow.com/questions/59584027
复制相似问题