【问题标题】:Windows Phone 8.1 navigate using string instead of a typeWindows Phone 8.1 使用字符串而不是类型导航
【发布时间】:2015-01-26 19:20:23
【问题描述】:

在 Windows Phone 8.1 中,有什么方法可以使用字符串而不是 Type 从一个页面导航到另一个页面?

没有反射,Frame.Navigate 只接受类型。

谢谢。

【问题讨论】:

  • 大多数人编写一个 NavigationService 来包装框架导航并在字典中查找页面名称。您仍然需要在某处注册类型。
  • 什么意思,没有反射?
  • 类型有什么问题吗?
  • @KaiBrummund 好主意,最好是做一本字典! :-)
  • @BlackCid 拥有NavigationService 或其他某种名称通常是个好主意,您应该这样做。不过,如果需要,我很确定您也可以使用反射。

标签: windows-phone-8.1 navigateuri


【解决方案1】:

我同意 Kai Brummund 的观点。您应该编写一个 NavigationService。导航服务的一个很好的例子是 MVVM 灯光导航服务。 Here you can find the source code.

【讨论】:

    【解决方案2】:

    或者...你可以使用MVVMLight,它带有一个集成的NavigationService (INavigationService)。 您可以像这样在 ViewModelLocator 中设置它:

    private const string URL_DETALLE = "/View/DetalleView.xaml";
    public ViewModelLocator()
    {
        // ...
    
        var navigationService = this.CreateNavigationService();
    
        if (!SimpleIoc.Default.IsRegistered<INavigationService>())
        {
            SimpleIoc.Default.Register<INavigationService>(() => navigationService);
        }
    
        //...
    }   
    
    private INavigationService CreateNavigationService()
    {
        var navigationService = new NavigationService();
        navigationService.Configure(URL_DETALLE, typeof(DetalleView));
    
        return navigationService;
    }
    

    然后在您的 VM 构造函数中,您将收到此导航服务,您可以这样使用它:

    private INavigationService navigationService;
    public DetalleViewModel(INavigationService navigationService)
    {
        this.navigationService = navigationService;
        this.navigationService.NavigateTo(ViewModelLocator.URL_DETALLE);
    }
    

    希望对你有帮助;)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多