使用Prism、MVVM、Unity的视图切换导航

3
container.RegisterType<object, LabStatusView>("LabStatusView");
Uri LabStatusViewUri = new Uri("pack://application:,,,/LabStatus;component/LabStatusView.xaml",     
UriKind.Absolute);
regionManager.RequestNavigate("HorizonNavigatorView",LabStatusViewUri,NavigationCompleted);

我正在使用这个来导航到LabStatusView,这似乎很简单。

在执行requestNavigate之后的ObjectStates:

  1. regionManager.Regions.ActiveRegion中只包含一个类型为“Object”的对象,而不是LabStatusView。
  2. 我所知道的使用Unity的唯一怪癖是我必须使用RegiterType方法的重载来注册我的类型。

有什么建议吗?我在这里做错了什么吗?

1个回答

3

在代码中导航要比实际操作容易得多。以下是我为一个项目执行此操作的方法。

//Register your View on Startup
container.RegisterType<object, LabStatusView>("LabStatusView");

//Navigation works like this
var labStatusView = new Uri("LabStatusView", UriKind.Relative);
regionManager.RequestNavigate("HorizonNavigatorView", labStatusView);

你可以试试这样做吗?

许多人在其区域和视图名称中使用静态类来避免“魔法字符串”。例如:

public class RegionNames
{
  public const string HorizonNavigatorView = "HorizonNavigatorView";
}
public class ViewNames
{
  public const string LabStatusView = "LabStatusView";
}

我无法在URI构造函数中仅使用LabStatusView,因为它位于不同的程序集中。这就是为什么我需要使用pack:格式的原因。我尝试过了,但它没有起作用。在导航后,它总是具有对象类型的引用。 - Jack_2060
我找到了我所缺少的东西。我们用来在容器中注册的名称就是我在创建URI时使用的名称。它们必须相同。我曾以为在创建URI时需要提供类的路径。 - Jack_2060
谢谢你提供了object类型映射 - 这对我来说非常重要。 - BCA

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接