【问题标题】:WPF/Prism : Views return System.ObjectWPF/Prism:视图返回 System.Object
【发布时间】:2011-08-02 15:14:30
【问题描述】:

我是 WPF 和 Prism 的新手,但我已经知道您必须在 Unity 中将视图注册为对象:

Container.RegisterType<Object,MyView>("My.Assembly.MyView");

不过,当我使用

var RelativeUriToMyView = new Uri("My.Assembly.MyView",UriKind.Relative);    
RegionManager.RequestNavigate(RelativeUriToMyView, RegionName, CallbackResult);

MyView 显示为 System.Object,CallbackResult 不包含错误。

我错过了什么?如果需要,我很乐意提供更多信息。

【问题讨论】:

    标签: wpf unity-container prism region-management


    【解决方案1】:

    您可能想查看 PRISM 源代码中的 RegionNavigationContentLoader.cs;这是为您加载视图的代码。

        protected virtual object CreateNewRegionItem(string candidateTargetContract)
        {
            object newRegionItem;
    
            try
            {
                newRegionItem = this.serviceLocator.GetInstance<object>(candidateTargetContract);
            }
            catch (ActivationException e)
            {
                throw new InvalidOperationException(
                    string.Format(CultureInfo.CurrentCulture, Resources.CannotCreateNavigationTarget, candidateTargetContract),
                    e);
            }
            return newRegionItem;
        }
    

    有几个辅助方法可以获取 URI,提取查询字符串,并创建用于查找视图并将其转换为对象的“名称”。

    本质上,您用于将具体类作为对象与 Unity 相关联的名称与您尝试使用 Unity 解析对象时需要使用的名称相同。这里有一些伪代码来解释,

    Container.RegisterType<object, ConcreteClass>(typeof(ConcreteClass).FullName);
    
    Locator.GetInstance<object>(UriWithFullName)
    

    如果这些都没有帮助,请发布 RelativeUriToMyView 以便我查看内容。 祝你好运。

    【讨论】:

    • 你在使用模块吗?延迟加载?
    • 我正在使用模块,但问题出在外壳视图上。我可以通过注册.Name 而不是.FullName 来解决这个问题。
    【解决方案2】:

    这个问题似乎是由使用其全名 (My.Assembly.MyView) 而不是其名称 (MyView) 注册视图引起的。

    编辑: 更改了问题以更准确地反映问题。

    【讨论】:

      猜你喜欢
      • 2011-01-29
      • 2021-09-20
      • 2011-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-24
      • 1970-01-01
      相关资源
      最近更新 更多