簡體   English   中英

復合視圖-視圖已存在於區域錯誤中

[英]Composite view - View already exists in region error

我正在使用WPF / Prism 4 / AvalonDoc應用程序。

我的觀點之一非常復雜,並且ViewModel變得龐大且難以管理。 因此,我決定使用自己的ViewModels將其拆分為較小的視圖。

我已經在視圖上放置了一個區域,並使用來自“主” ViewModel構造函數的regionManager.RegisterViewWithRegion方法將子視圖加載到該區域中。

當僅加載一個視圖實例時,該方法可以按預期工作。 但是,當我打開該屏幕的第二個實例(將它作為DocumentContent加載到AvalonDock的DocumentPane中)時,出現“視圖已存在於區域中”錯誤​​。

如果可能的話,我想避免給該地區起一個唯一的名字。 有沒有辦法表明我要向“主”視圖的特定實例添加子視圖? 任何建議如何做到這一點?

如果您使用的是MEF,並且您的視圖為Singleton,即

[PartCreationPolicy(CreationPolicy.Shared)]

並且您的INavigationAware在以下INavigationAware返回false

public override bool IsNavigationTarget(NavigationContext navigationContext)

{返回假;}

您將收到此錯誤。

[PartCreationPolicy(CreationPolicy.Shared)]更改為[PartCreationPolicy(CreationPolicy.NonShared)]

到此為止。

我擔心您不能在多個地區使用相同的名稱。 當視圖模型變得復雜時,我不希望拆分視圖。 您可以將視圖模型分為幾個專門的視圖模型。

一個例子。 您有一個用戶管理。 一種視圖模型是所有用戶的列表。 此列表包含用戶視圖模型。 每個用戶視圖模型都包含一個用戶權限視圖模型的實例,該實例本身又是僅代表一個用戶權限的視圖模型的列表。 因此,有關如何呈現特殊用戶權限的邏輯進入對應的視圖模型,而不是“主”用戶列表視圖模型。 這樣,您可以將關注點分離為不同的視圖模型。

綁定到那些視圖模型就像只有一個視圖模型一樣簡單。 只是路徑越來越長。 當數據上下文是上例中的用戶列表視圖模型時,可以適當地使用諸如CurrentUserVM.UserRightsVM的綁定路徑來獲取用戶權限列表。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM