2011-08-02 76 views
1

我是新来WPF和棱镜,但我已经学会了,你必须注册一个团结查看对象:WPF /棱镜:视图返回System.Object的

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不包含错误。

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

回答

1

问题似乎与它的全名(My.Assembly.MyView),而不是它的名称(MyView的)注册的观点引起的。

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

2

你会想看看在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几个辅助方法,提取查询字符串,并创建一个用来查找您的看法,并投它作为一个对象的“名称”。

从本质上讲,你正在使用你的具体类与团结的对象关联的名字是你需要的时候你试图解决与团结的对象使用同一个。这里是一些pesudocode解释,

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

Locator.GetInstance<object>(UriWithFullName) 

如果这没有帮助,发布RelativeUriToMyView,所以我可以看到的内容。 祝你好运。

+0

更新的问题,以显示您所请求的内容。 – grefly

+0

你使用模块吗?加载装载? – Rick

+0

我使用的模块,但问题是与壳牌意见。我能够通过注册'.Name'而不是'.FullName'来解决问题。 – grefly