我尝试在两个UserControl之间实现导航。我这样做:有一个AppController类,它有一个ChangeCurrentView方法,该方法负责更改MainPage中的UserControl,但该方法不起作用:
internal class AppController {
public enum CurrentViewTypes {
NotesList,
AddEditNote,
}
public void ChangeCurrentView(CurrentViewTypes viewType) {
switch (viewType) {
case CurrentViewTypes.NotesList:
NotesListViewModel sVM = new NotesListViewModel(this);
NotesListView sV = new NotesListView();
//привязка
sV.DataContext = sVM;
//отображение
MainViewModel.CurrentView = sV;
break;
case CurrentViewTypes.AddEditNote:
AddEditViewModel eVM = new AddEditViewModel(this);
AddEditView eV = new AddEditView();
//привязка
eV.DataContext = eVM;
//отображение
MainViewModel.CurrentView = eV;
break;
default:
throw new ArgumentOutOfRangeException(nameof(viewType));
}
}
}
App.xaml.cs中的应用程序启动被覆盖,如下所示:
protected override void OnLaunched(LaunchActivatedEventArgs e) {
MainPage mainPage = new MainPage();
mainPage.DataContext = _controller.MainViewModel;
Window.Current.Content = mainPage;
Window.Current.Activate();
_controller.ChangeCurrentView(AppController.CurrentViewTypes.NotesList);
}
在MainPage.xaml中,这是绑定:
<ContentPresenter Content="{Binding CurrentView}" />
do it similar to this,my code
我试着用vpf的例子来类比(我用的是userControl和1 page),但是不起作用。如何在mvvm架构的uvp项目中正确实现导航?我需要在1 page上使用用户控件之间的切换吗?
1条答案
按热度按时间t8e9dugd1#
通常,我们使用Page Class和Frame Class在UWP应用中进行导航。导航发生在页面之间,通过Frame。Navigate方法。UserControl只是一个应该显示在页面内部的控件。ViewModels用作不同页面的DataContext。
另外,除非你想改变起始页,否则你不需要覆盖
onlaunch
方法。如果你想改变起始页,你只需要改变rootFrame.Navigate
的参数。我建议你从UWP的基本导航开始:Implement navigation between two pages。