我正在创建View
包含少量ContentControl
元素的“布局” ,这导致我需要注册一个“默认”控件以在开始时显示。当我意识到RegisterViewWithRegion
可以解决此问题时,但是我不确定应该在哪里使用它?
到目前为止,我一直在使用RegisterViewWithRegion
layout的内部构造函数ViewModel
,但这导致
ArgumentException:具有给定名称的区域已注册:AuthContentRegion
再次ViewModel
构造一次错误(第二次)。
视图:
<DockPanel LastChildFill="True">
<ContentControl prism:RegionManager.RegionName="{x:Static core:RegionNames.NavRegion}" DockPanel.Dock="Top" Margin="5" />
<ContentControl prism:RegionManager.RegionName="{x:Static core:RegionNames.AuthContentRegion}" Margin="5" />
</DockPanel>
查看模型:
public AdminViewModel(IRegionManager regionManager)
{
regionManager.RegisterViewWithRegion(RegionNames.NavRegion, typeof(Views.AdminNavView));
regionManager.RegisterViewWithRegion(RegionNames.AuthContentRegion, typeof(Views.RailwayListView));
}
本质上,我想要的是将默认UserControl
注册为ContentControl
/,Region
而一旦View
/ViewModel
再次构造,则不会获得任何异常。
实现IRegionMemberLifetime
与KeepAlive
设置为false
似乎已经解决了问题,出现异常。
我也意识到RegisterViewWithRegion
可以RequestNavigate
通过在Loaded
事件中调用它来替换为方法。
视图:
<i:Interaction.Triggers>
<i:EventTrigger EventName="Loaded">
<i:InvokeCommandAction Command="{Binding OnLoadedCommand}" />
</i:EventTrigger>
</i:Interaction.Triggers>
<Grid>
<DockPanel LastChildFill="True">
<views:AdminNavView DockPanel.Dock="Top" Margin="5" />
<ContentControl prism:RegionManager.RegionName="{x:Static core:RegionNames.AuthContentRegion}" Margin="5" />
</DockPanel>
</Grid>
ViewModel:
public class AdminViewModel : BindableBase, IRegionMemberLifetime
{
private readonly IRegionManager _regionManager;
public AdminViewModel(IRegionManager regionManager)
{
_regionManager = regionManager;
OnLoadedCommand = new DelegateCommand(OnLoaded);
}
public bool KeepAlive => false;
public ICommand OnLoadedCommand { get; }
public void OnLoaded()
{
_regionManager.RequestNavigate(RegionNames.AuthContentRegion, NavigationPaths.RailwayListPath);
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句