【问题标题】:View Switching Navigation using Prism,MVVM,Unity使用 Prism、MVVM、Unity 查看切换导航
【发布时间】:2012-05-20 11:24:09
【问题描述】:
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 方法的重载注册了我的类型。

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

【问题讨论】:

    标签: c# mvvm navigation prism unity-container


    【解决方案1】:

    To Navigate 比在您的代码中要容易得多。这是我为一个项目所做的。

    //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: 格式。我试过这个,但没有用。导航后它总是有一个对象类型的引用。
    • 我找到了我缺少的东西。我们用于向容器注册的名称是我在创建 URI 时使用的名称。它们必须相同。我想我必须在创建 URI 时给出类的路径。
    • 感谢object 类型映射——这对我来说一切都不同
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-08
    • 2016-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多