prism - 在 TabPage 子视图模型上未调用销毁
问题描述
我的主页有 DevExpressTabPage
控件(类似于 Xamarin Forms TabbedPage
),它看起来像这样:
<dxn:TabPage>
<dxn:TabPageItem>
<NavigationPage Title="Page1">
<x:Arguments>
<local:Page1/>
</x:Arguments>
</NavigationPage>
<NavigationPage Title="Page2">
<x:Arguments>
<local:Page2/>
</x:Arguments>
</NavigationPage>
</dxn:TabPageItem>
</dxn:TabPage>
当我从我的应用程序中注销时,我使用如下导航:
NavigationService.NavigateAsync( "/LoginPage" );
调用了Destroy 方法MainPageViewModel
,但没有在任何子视图模型上调用,例如Page1
,Page2
等等。我已经IDestructible
为每个子页面添加了接口。
这是一个错误还是设计使然,或者我做错了什么?
解决方案
在Xamarin.Forms的情况下,DestructibleRegionBehavior
调用Destroy
从区域中删除的视图。它不考虑子视图。因此,答案是肯定的,这是当前的行为,我猜这是设计使然,因为 Prism 并不支持所有用例。如果你需要这个功能,你可以在原来的基础上实现你自己的区域行为。如果您的视图层次结构是固定的,那么创建特殊行为可能会更容易。您还可以考虑创建一个特殊的区域适配器,例如,TabPage
如果不需要重用或泛化它。
Prism 7.2.0.1367添加了IDestructible
对WPF中的支持,如您在此拉取请求 1709中所见。前面的陈述也适用于这种行为,它本质上是相同的。您可以扩展它以使用符合您要求的方法或其他方法遍历子视图。VisualTreeHelper
推荐阅读
- sql-server - SQL Query中如何根据其最左侧的String值是数字来确定和避免记录?
- javascript - Mongoose:更新数组内的嵌套数组
- android - 以编程方式设置后获取android视图按钮的宽度
- java - Visual Studio Code Java JUnit 未输出到控制台
- c# - 我该如何解决这个错误“System.ServiceModel.FaultException”
- excel - 如何基于多个选项卡相关值进行嵌套搜索?
- r - Cut by day 省略了年初和年末的日子
- bash - 如何按特定顺序提取行
- apache-spark - Pickle 对象(模型数据)在 SPARK 流中遇到内存问题
- python - 如何在 Python 3 的 .txt 文件中找到单词的位置