WPF/Prism:视图返回System.Object



我是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。对象,并且CallbackResult不包含Error。

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

你会想看看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,提取查询字符串,并创建用于查找视图的'name',并将其转换为对象。

从本质上讲,你用来将你的具体类作为一个对象与Unity相关联的名称与你在尝试用Unity解析对象时需要使用的名称是相同的。下面是一些伪代码来解释,

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

如果这些都没有帮助,张贴RelativeUriToMyView,所以我可以看到的内容。好运。

这个问题似乎是由于用它的FullName (My.Assembly.MyView)而不是它的Name (MyView)注册视图引起的。

编辑:

修改了问题,以更准确地反映问题

相关内容

  • 没有找到相关文章

最新更新