2012-04-17 120 views
6

我目前正在使用Tab控件并创建了一个区域,因此它将成为我的主机。WPF Prism如何在区域内重复视图

我想要做的是将同一视图添加到区域两次..你可能会问为什么?因为应用程序正在进行一个简单的聊天应用程序 - 视图中有很多实例,但每个实例都有不同的信息。

我的代码至今;;

 IConversationDetailsPresentationModel convDetailsView1 = 
      this.Container.Resolve<IConversationDetailsPresentationModel>(); 

     IRegionManager manager = this.Container.Resolve<IRegionManager>(); 

     manager.RegisterViewWithRegion("TabRegion",() => convDetailsView1); 

     IConversationDetailsPresentationModel convDetailsView2 = 
      this.Container.Resolve<IConversationDetailsPresentationModel>(); 

     manager.RegisterViewWithRegion("TabRegion",() => convDetailsView2); 

而且我的看法是,像这样具有统一登记;;

this.Container.RegisterType<IConversationDetailsPresentationModel,     ConversationDetailsPresentationModel>(
      new TransientLifetimeManager()); 

     this.Container.RegisterType<IConversationDetailsView, ConversationDetailsView>(
      new TransientLifetimeManager()); 

另外,我的XAML

<TabControl TabStripPlacement="Left" 
      Width="Auto" 
      Height="Auto" 
      cal:RegionManager.RegionName="TabRegion" 
      Name="TabRegion" 
      SelectedItem="{Binding SelectedTab}"> 
    <TabControl.ContentTemplate> 
     <DataTemplate> 
      <ContentControl cal:RegionManager.RegionName="TabContentRegion"> 

      </ContentControl> 
     </DataTemplate> 
    </TabControl.ContentTemplate> 
</TabControl> 

编辑:我的实际问题是这样的..是否有可能有一个区域内重复的观点?当我尝试它时,我得到一个关于它已被注册的异常..我真正需要的是绕过这个或可能创建一个允许它的区域。

感谢您的任何帮助!

欢呼声。 ste。

+0

我不知道你在问什么。你不是只为自己的问题写出自己的答案。 “区域附加到UI Content元素,如** ContentControl **,** ItemsControl **,** TabControl **或客户控件,并管理UI元素的内容”。所以是的,它应该工作。 – 2012-04-17 11:17:29

+0

@Rikkos - 请参阅我的更新评论..我基本上寻找的是在我的区域内有重复的意见! – Steoates 2012-04-17 11:53:18

+1

只是一个故障排除的想法,你有没有尝试过GetHashCode()来看看TransientLifetimeManager是否给你不同的实例? – 2012-04-17 15:28:48

回答

2

试试这个。

IRegion TabRegion = manager.Regions["TabRegion"]; 

tabRegion.Add(convDetailsView1); 
tabRegion.Add(convDetailsView2); 
+0

这并不令人遗憾 - 它给出了跟随误差。“{”指定的元素已经是另一个元素的逻辑子元素。先断开它。“}” – Steoates 2012-04-17 12:45:54

+0

等待,重复完全相同或相同类型。我没有看到你使用相同的实例。我做了一个测试项目,我没有任何问题。我已经尝试了一切。如果你有这个项目,我可以看看你的项目。这将是最后一个选项来帮助你 – 2012-04-17 13:17:59

+0

相同的类型真的 - 他们应该有自己的视图/演示模型的实例只是不同的数据.. – Steoates 2012-04-17 15:03:22

0

尝试此解决方案:

IRegion TabRegion = manager.Regions["TabRegion"]; 
tabRegion.Add(convDetailsView1).AdToRegion("make your region here",convDetailsView2); 
相关问题