我应该在Prism中的哪里使用`RegisterViewWithRegion`?

达尼洛·诺瓦科维奇(Danilo Novakovic)

我正在创建View包含少量ContentControl元素的“布局” ,这导致我需要注册一个“默认”控件以在开始时显示。当我意识到RegisterViewWithRegion可以解决此问题时,但是我不确定应该在哪里使用它?

到目前为止,我一直在使用RegisterViewWithRegionlayout的内部构造函数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再次构造,则不会获得任何异常

达尼洛·诺瓦科维奇(Danilo Novakovic)

实现IRegionMemberLifetimeKeepAlive设置为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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

我应该在接口定义或实现类中的@Transactional注解:放在哪里?

我应该在MVVM中的哪里放置下载器类?

Xcode中的Storyboard参考,我们应该在哪里使用它?

我应该在Laravel 5中将JS存储在哪里?

我应该在我的Rails应用程序中的哪里定义我的resque logger

我应该在REST api调用中的哪里放置API密钥?

我的JavaScript应该在哪里使用View组件?

在这个复杂的查询中,我应该在哪里指定output_field kwarg?

我应该在哪里注册我的DBAL类型?

使用Vue-cli,我应该在哪里声明我的全局变量?

我应该在哪里分发我的redux

我应该在StackNavigator中的哪里放置“ tabBarOptions”?

我应该在Apache docker映像中的哪里复制VirtualHost指令?

在Angular中,我应该在哪里使用安全导航(Elvis Operator,“?”)?

我应该在哪里调用使用数据的方法?

我应该在哪里使用“ swapgs”指令

我应该在哪里实现单击功能,以帮助我使用代码

我应该在哪里查看MySQL中的文章

我应该在Laravel 5中的哪里放置初始服务提供商呼叫?

我应该在哪里放置我的引导程序?

我应该在哪里在我的代码中插入这些数据?

我应该在哪里使用 'use' 在 php 中?

我应该在哪里打印我的结果

我应该在哪里安装 Ubuntu 中的软件?

我应该在哪里修改?

使用 AWS 时,我应该在哪里上传我的应用程序文件?

我应该在哪里刷新 SvelteKit 中的 JWT

在 Angular 中,我应该在哪里存储我的 Google 地图密钥?

我应该在 React 中的哪里保存 API 信息?