外观
Prism8 IDialog加载视图跳转
需求
在IDialogAware中实现弹窗出其他页面
- 实现:通过通过
prism:Region定义一个区域,在跳转时使用导航IRegionManager跳转<ContentControl Margin="30" prism:RegionManager.RegionName="PopWindowContainer"/> - 问题:无法通过
prism:Region的方式无法在IRegionManager中拿到区域,导致无法二次导航或触发 viewmodel 的接口- 分析:生命周期的问题?
- prism 结论设计模式决定 A New IDialogService for WPF · Issue #1666 · PrismLibrary/Prism (github.com)
This is by design, you need to assign the region manager to your dialog when it is created. 这是设计使然,您需要在创建对话框时将区域管理器分配给对话框。
换方式:通过 MVVM 绑定的形式
使用<ContentControl Margin="30" Content="{Binding PopWindow}"/>,将 UserControl 传递过来 绑定!
新问题
无法传递参数到页面 换方式,通过反射来拿到 viewmodel,调用弹窗页面继承的抽象类中的函数(规定弹窗页的函数实现统一格式)
参数可以传递,但是页面统一性的问题,view 与 viewmodel 都获取到了 但是他们是单独的对象 没有意义,调用了 viewmodel 的函数,view 并不相关?怎么处理
prism 跨 region 竟然无法触发导航事件,??? 大概是RegionManager.SetRegionManager();设置主域的原因,未验证 用事件吧简单粗暴
验证:
- 由于之前的绑定都是隐形绑定,没有去
RequestNavigate()触发导航的动作,导致无法执行到事件 _regionManager.RequestNavigate("region", viewurl);
