首页 > 解决方案 > 在 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,但没有在任何子视图模型上调用,例如Page1Page2等等。我已经IDestructible为每个子页面添加了接口。

这是一个错误还是设计使然,或者我做错了什么?

标签: prism

解决方案


Xamarin.Forms的情况下,DestructibleRegionBehavior调用Destroy从区域中删除的视图。它不考虑子视图。因此,答案是肯定的,这是当前的行为,我猜这是设计使然,因为 Prism 并不支持所有用例。如果你需要这个功能,你可以在原来的基础上实现你自己的区域行为。如果您的视图层次结构是固定的,那么创建特殊行为可能会更容易。您还可以考虑创建一个特殊的区域适配器,例如,TabPage如果不需要重用或泛化它。


Prism 7.2.0.1367添加了IDestructibleWPF中的支持,如您在此拉取请求 1709中所见。前面的陈述也适用于这种行为,它本质上是相同的。您可以扩展它以使用符合您要求的方法或其他方法遍历子视图。VisualTreeHelper


推荐阅读