我有一个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
在对话框中使用的视图或视图模型中,您是订阅事件还是注册您不取消订阅的应用程序命令,或者注销对话框时取消注册?这可能导致类似的行为。 –