我正在使用棱镜。我有一个视图(DetailMainUC.xaml),它以下面的方式保存许多其他视图。
<UserControl.Resources>
<DataTemplate x:Key="View1Template" DataType="{x:Type vm:DetailMainUCViewModel}">
<local:HomeUC />
</DataTemplate>
<DataTemplate x:Key="View2Template" DataType="{x:Type vm:DetailMainUCViewModel}">
<local:WalkAwayBehaviorUC />
</DataTemplate>
<DataTemplate x:Key="View3Template" DataType="{x:Type vm:DetailMainUCViewModel}">
<local:WakeUpOnApproachUC />
</DataTemplate>
<DataTemplate x:Key="View4Template" DataType="{x:Type vm:DetailMainUCViewModel}">
<local:NoLockOnPresenceUC />
</DataTemplate>
<DataTemplate x:Key="View5Template" DataType="{x:Type vm:DetailMainUCViewModel}">
<local:PeekDimmingUC />
</DataTemplate>
<DataTemplate x:Key="View6Template" DataType="{x:Type vm:DetailMainUCViewModel}">
<local:SettingsUC />
</DataTemplate>
</UserControl.Resources>
<Grid>
<ContentControl Grid.Column="1" Grid.Row="1" Content="{Binding }">
<ContentControl.Style>
<Style TargetType="{x:Type ContentControl}">
<Style.Triggers>
<DataTrigger Binding="{Binding SwitchView}" Value="Home">
<Setter Property="ContentTemplate" Value="{StaticResource View1Template}" />
</DataTrigger>
<DataTrigger Binding="{Binding SwitchView}" Value="Walk Away Behaviour">
<Setter Property="ContentTemplate" Value="{StaticResource View2Template}"></Setter>
</DataTrigger>
<DataTrigger Binding="{Binding SwitchView}" Value="Wake up on approach">
<Setter Property="ContentTemplate" Value="{StaticResource View3Template}" />
</DataTrigger>
<DataTrigger Binding="{Binding SwitchView}" Value="No lock on presence">
<Setter Property="ContentTemplate" Value="{StaticResource View4Template}" />
</DataTrigger>
<DataTrigger Binding="{Binding SwitchView}" Value="Peeking and Dimming">
<Setter Property="ContentTemplate" Value="{StaticResource View5Template}" />
</DataTrigger>
<DataTrigger Binding="{Binding SwitchView}" Value="Settings">
<Setter Property="ContentTemplate" Value="{StaticResource View6Template}" />
</DataTrigger>
</Style.Triggers>
</Style>
</ContentControl.Style>
</ContentControl>
</Grid>
现在,我正在使用事件聚合器在其他区域的不同视图模型之间进行通信。 usercontrol
的我的视图模型如下:
public DetailMainUCViewModel(IEventAggregator eventAggregator, HomeViewModel homeViewModel)
{
this.HomeVM = homeViewModel;
this._eventAggregator = eventAggregator;
HomeVM.Initialization(this._eventAggregator);
this._eventAggregator.GetEvent<MenuClickEvent>().Subscribe(GetMenuName);
SwitchView = "Home";
}
现在属性HomeVM
的类型为HomeViewModel
,这是子级DetailMainUCViewModel
的视图模型。像这样,还有许多其他子视图模型。现在我的问题是,我看到HomeViewModel
的构造函数被调用了两次,并且所有其他子视图模型也都发生了同样的情况。
我面临的主要问题是第二次调用子视图模型时,eventAggregator
变为null
。
任何帮助表示赞赏。下图显示了首先调用HomeViewModel的构造函数的调用堆栈
下图显示了对第二次调用HomeViewModel的构造函数的调用堆栈
DetailsMainUCViewModel是父视图模型,而HomeViewModel是子视图模型。DetailMainUC.xaml以代码部分中提到的方式保存HomeUC.xaml。
我也写了下面提到的代码
<UserControl.DataContext>
<vm:HomeViewModel></vm:HomeViewModel>
</UserControl.DataContext>
我怀疑是因为我在两个地方使用附加数据上下文,所以我的视图模型被调用了两次。
在HomeUC.xaml中]
父用户控件DetailMainUC.xaml
但是我无法根据需要删除它们。
我的班级设计是DetailMainUCViewModel是父视图模型,而HomeViewModel是子视图模型。DetailMainUC.xaml是父视图,而HomeUC.xaml是子视图。首先,我给出的代码片段来自DetailMainUC.xaml(包含所有子用户控件)问候
@@ BionicCode我的问题太大了,因此无法进一步编辑。因此,我在这里回答您的问题。
除此之外,我正在实现IModule接口的模块中初始化DetailMainUC.xaml。>
public class STDetailOptionsModule : IModule { private readonly IRegionManager _regionManager; public STDetailOptionsModule(IRegionManager regionManager) { this._regionManager = regionManager; } public void OnInitialized(IContainerProvider containerProvider) { _regionManager.RegisterViewWithRegion(RegionNames.DetailOptionsRegion, typeof(DetailMainUC)); } public void RegisterTypes(IContainerRegistry containerRegistry) { } }
我正在使用棱镜。我有一个视图(DetailMainUC.xaml),它以以下方式保存许多其他视图。
[
@@ BionicCode我的问题太大了,因此无法进一步编辑。因此,我在这里回答您的问题。