棱镜区域在内容区域中没有变化 - WPF
Prism region not changing in content region - WPF
我正在尝试学习 Prism 并在我正在开发的新应用程序中加以利用,但一直无法尝试让它在导航中切换内容。作为参考,我 working/learning 来自的视频是 Brian Lagunas 在 YouTube 上的视频 MVVM Made Simple(我已经多次浏览该部分但无法弄清楚我做错了什么)。这是我的主要 window 背后的代码(当我添加 regionManager.RegisterViewWithRegion()
行时,它允许注册的第一个视图在启动时显示,但仍然不允许我从一个视图切换到另一个视图。
public partial class MainWindow : Window
{
protected RegionManager regionManager = new RegionManager();
public MainWindow()
{
InitializeComponent();
regionManager.RegisterViewWithRegion("Content", typeof(Index));
regionManager.RegisterViewWithRegion("Content", typeof(Home));
DataContext = new MainWindowViewModel(this, regionManager);
这是我与 region/region 管理器相关的所有代码和 prism xmlns 语句(这些位于我所有视图的顶部)- 我已经测试了按钮上的命令绑定并且知道该方法正在被触发,所以按钮应该是好的 - 但我不确定的其他一切但根据视频它看起来对我来说是正确的。
XMLNS 语句
xmlns:prism="http://prismlibrary.com/"
prism:ViewModelLocator.AutoWireViewModel="True"
XAML
中的内容区域
<!-- Page Content -->
<Border Grid.Row="3" Padding="{Binding WindowContentPadding}">
<ContentControl prism:RegionManager.RegionName="Content" />
</Border>
引导程序
class Bootstrapper : UnityBootstrapper
{
protected override DependencyObject CreateShell()
{
return Container.Resolve<MainWindow>();
}
protected override void InitializeShell()
{
Application.Current.MainWindow.Show();
}
protected override void ConfigureContainer()
{
base.ConfigureContainer();
// Registering Unity containers for view model navigation
// All views must be registered.
Container.RegisterType(typeof(object), typeof(Home), "Home");
Container.RegisterType(typeof(object), typeof(Index), "Index");
}
}
MainWindowViewModel
public DelegateCommand<string> NavigateCommand { get; set; }
public MainWindowViewModel(Window _window, RegionManager _regionManager)
{
window = _window;
// MVVM model locator code
regionManager = _regionManager;
NavigateCommand = new DelegateCommand<string>(Navigate);
}
private void Navigate(string uri)
{
//Test
Console.WriteLine(uri);
regionManager.RequestNavigate("Content", uri);
}
我还检查了他的 MVVM Pluralsight 课程,那里的说明看起来也一样,所以据我所知,这一定是我遗漏的东西。
protected RegionManager regionManager = new RegionManager();
您既不想创建自己的RegionManager
,也不想在视图中创建。
在视图模型中执行导航并注入区域管理器。
public MainWindowViewModel(Window _window, RegionManager _regionManager)
您不希望在视图模型中包含视图,而且您也不需要它。
让视图仅通过绑定与视图模型交互。
I have two views (viewA and viewB) and two buttons that should switch between the two views
然后让一个按钮执行_regionManager.RequestNavigate( "Content", "viewA" )
,另一个执行_regionManager.RequestNavigate( "Content", "viewB" )
。视图应该像这样注册 _container.RegisterTypeForNavigation<viewA>( "viewA" )
.
您不想在此处使用 RegisterViewWithRegion
,只需在您的应用完成初始化后导航至 ViewA
。
我正在尝试学习 Prism 并在我正在开发的新应用程序中加以利用,但一直无法尝试让它在导航中切换内容。作为参考,我 working/learning 来自的视频是 Brian Lagunas 在 YouTube 上的视频 MVVM Made Simple(我已经多次浏览该部分但无法弄清楚我做错了什么)。这是我的主要 window 背后的代码(当我添加 regionManager.RegisterViewWithRegion()
行时,它允许注册的第一个视图在启动时显示,但仍然不允许我从一个视图切换到另一个视图。
public partial class MainWindow : Window
{
protected RegionManager regionManager = new RegionManager();
public MainWindow()
{
InitializeComponent();
regionManager.RegisterViewWithRegion("Content", typeof(Index));
regionManager.RegisterViewWithRegion("Content", typeof(Home));
DataContext = new MainWindowViewModel(this, regionManager);
这是我与 region/region 管理器相关的所有代码和 prism xmlns 语句(这些位于我所有视图的顶部)- 我已经测试了按钮上的命令绑定并且知道该方法正在被触发,所以按钮应该是好的 - 但我不确定的其他一切但根据视频它看起来对我来说是正确的。
XMLNS 语句
xmlns:prism="http://prismlibrary.com/"
prism:ViewModelLocator.AutoWireViewModel="True"
XAML
中的内容区域<!-- Page Content -->
<Border Grid.Row="3" Padding="{Binding WindowContentPadding}">
<ContentControl prism:RegionManager.RegionName="Content" />
</Border>
引导程序
class Bootstrapper : UnityBootstrapper
{
protected override DependencyObject CreateShell()
{
return Container.Resolve<MainWindow>();
}
protected override void InitializeShell()
{
Application.Current.MainWindow.Show();
}
protected override void ConfigureContainer()
{
base.ConfigureContainer();
// Registering Unity containers for view model navigation
// All views must be registered.
Container.RegisterType(typeof(object), typeof(Home), "Home");
Container.RegisterType(typeof(object), typeof(Index), "Index");
}
}
MainWindowViewModel
public DelegateCommand<string> NavigateCommand { get; set; }
public MainWindowViewModel(Window _window, RegionManager _regionManager)
{
window = _window;
// MVVM model locator code
regionManager = _regionManager;
NavigateCommand = new DelegateCommand<string>(Navigate);
}
private void Navigate(string uri)
{
//Test
Console.WriteLine(uri);
regionManager.RequestNavigate("Content", uri);
}
我还检查了他的 MVVM Pluralsight 课程,那里的说明看起来也一样,所以据我所知,这一定是我遗漏的东西。
protected RegionManager regionManager = new RegionManager();
您既不想创建自己的RegionManager
,也不想在视图中创建。
在视图模型中执行导航并注入区域管理器。
public MainWindowViewModel(Window _window, RegionManager _regionManager)
您不希望在视图模型中包含视图,而且您也不需要它。
让视图仅通过绑定与视图模型交互。
I have two views (viewA and viewB) and two buttons that should switch between the two views
然后让一个按钮执行_regionManager.RequestNavigate( "Content", "viewA" )
,另一个执行_regionManager.RequestNavigate( "Content", "viewB" )
。视图应该像这样注册 _container.RegisterTypeForNavigation<viewA>( "viewA" )
.
您不想在此处使用 RegisterViewWithRegion
,只需在您的应用完成初始化后导航至 ViewA
。