我有一個TabControl
對話框窗口,其中包含4個選項卡,每個選項卡包含一個區域。WPF - 棱鏡:在對話框窗口中顯示區域
DialogWindowTestView.xaml
<TabControl DockPanel.Dock="Top" TabStripPlacement="Left">
<TabItem Header="General">
<ContentControl regions:RegionManager.RegionName="GeneralRegion" />
</TabItem>
<TabItem Header="Materials">
<ContentControl regions:RegionManager.RegionName="MaterialsRegion" />
</TabItem>
<TabItem Header="Design">
<ContentControl regions:RegionManager.RegionName="DesignRegion" />
</TabItem>
<TabItem Header="Units">
<ContentControl regions:RegionManager.RegionName="UnitsRegion" />
</TabItem>
</TabControl>
我試圖以顯示選項卡內區域的兩個方法。 首先我用RegisterViewWithRegion
。這會正確顯示區域,但在第一次打開對話框窗口時會調用一次視圖,關閉窗口並重新打開該窗口後,每次用戶打開對話框窗口時都會調用視圖構造函數多次。
編輯:這是tabItem裏面被多次調用的視圖,而不是對話窗口。
DialogWindowTestViewModel.cs
if (!regionManager.Regions.ContainsRegionWithName("GeneralRegion")) {
regionManager.RegisterViewWithRegion("GeneralRegion", typeof(GeneralView));
}
if (!regionManager.Regions.ContainsRegionWithName("MaterialsRegion")) {
regionManager.RegisterViewWithRegion("MaterialsRegion", typeof(MaterialsView));
}
if (!regionManager.Regions.ContainsRegionWithName("DesignRegion")) {
regionManager.RegisterViewWithRegion("DesignRegion", typeof(DesignView));
}
if (!regionManager.Regions.ContainsRegionWithName("UnitsRegion")) {
regionManager.RegisterViewWithRegion("UnitsRegion", typeof(UnitSetView));
}
第二種方法是regionManager.RequestNavigate
,這個正確顯示的區域中,但關閉並重新曾向視圖中的所有的區域消失後。窗口將與所有標籤爲空。
DialogWindowTestView.xaml.cs
DialogWindowTestViewModel.cs
container.RegisterType<object, GeneralView>(typeof(GeneralView).FullName);
regionManager.RequestNavigate("GeneralRegion", typeof(GeneralView).FullName);
container.RegisterType<object, MaterialsView>(typeof(MaterialsView).FullName);
regionManager.RequestNavigate("MaterialsRegion", typeof(MaterialsView).FullName);
container.RegisterType<object, DesignView>(typeof(DesignView).FullName);
regionManager.RequestNavigate("DesignRegion", typeof(DesignView).FullName);
container.RegisterType<object, UnitSetView>(typeof(UnitSetView).FullName);
regionManager.RequestNavigate("UnitsRegion", typeof(UnitSetView).FullName);
什麼是爲了正確顯示區,而無需任何不必要的行爲,最好的辦法?
第一種方法有什麼問題?您是否期望在對話框關閉並重新打開時不會重新創建視圖? – mm8
@ mm8每次用戶打開視圖時都會調用視圖構造函數多次,並且每次窗口關閉並重新打開時,調用構造函數的次數都會增加。視圖構造函數在創建視圖時第一次被調用,第二次被調用3次。第三次被稱爲更多。 **這是tabItem中被多次調用的視圖,而不是對話窗口。** – IBRA
在對話框中使用的視圖或視圖模型中,您是訂閱事件還是註冊您不取消訂閱的應用程序命令,或者註銷對話框時取消註冊?這可能導致類似的行爲。 –