【问题标题】:Hiding a tab in Xamarin.Forms using Prism framework使用 Prism 框架隐藏 Xamarin.Forms 中的选项卡
【发布时间】:2017-09-14 22:03:21
【问题描述】:

我正在开发一个使用 MVVM 模式和 Prism 的 Xamarin Forms 项目。

我的问题是,我需要能够根据布尔值隐藏标签页上的标签。 XAML 中有一个名为“IsVisible”的可绑定属性,我认为它会对用户隐藏选项卡,但选项卡仍会显示,但在选择时会显示空白页。

目前我的 XAML 看起来像这样

<?xml version="1.0" encoding="utf-8"?>
<TabbedPage xmlns="http://xamarin.com/schemas/2014/forms"
        xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
        xmlns:prism="clr-namespace:Prism.Mvvm;assembly=Prism.Forms"
        xmlns:local="clr-namespace:com.XXXXXXX"
        prism:ViewModelLocator.AutowireViewModel="True"

        BackgroundColor="White"
        x:Class="com.XXXXXXXXXX.EditChargePage"
        Title="{Binding Title}">

<local:EditChargeDetailsPage Title="Details" />
<local:EditChargeTrackingPage Title="Tracking" IsVisible="{Binding TabContext.HasTracking}" IsEnabled="{Binding TabContext.HasTracking}"/>
<local:EditChargeNotesPage Title="Notes" />


</TabbedPage>

最初为了解决问题,我只是使用“IsVisible”,当它没有按预期工作时,我添加了“IsEnabled”,它似乎没有做任何事情。

有没有办法在不破坏 MVVM 的情况下使用 Xamarin(或 Xamarin 的 Prism)中的布尔值从 UI 中隐藏选项卡?

【问题讨论】:

    标签: c# xamarin xamarin.forms prism


    【解决方案1】:

    您可能想查看Prism SamplesTabbedNavigation 示例演示了如何使用INavigatingAwareIEventAggregator 初始化选项卡式子项,以及在运行时动态添加选项卡。如果您需要更精细的控制,例如您的一个子页面的 ViewModel 中的一个值来确定是否应显示其他页面,那么您可以使用它来发布带有 IEventAggregator 的事件并订阅该事件您的 TabbedPage 来处理添加或删除页面。

    不幸的是,IsVisibleIsEnabled 实际上并没有像您希望的那样在 TabbedPage 中工作。因此,您可以完成此操作的唯一方法是实际操作 TabbedPage 的 Children 直接从集合中推送或弹出它们。

    【讨论】:

    • 谢谢,这绝对是正确的方向。我有这些样本,但不知道它们最近已更新。玩弄我无法同时动态添加选项卡并将选项卡(不是第一个选项卡)显示为默认选项卡。再次感谢
    • 我正在尝试在我的项目中复制 TabbedNavigation,但是当我调用 NavigationService.NavigateAsync(_tabbedPagePath);我收到错误 System.NullReferenceException:对象引用未设置为对象的实例。在 Prism.Navigation.PageNavigationService.OnNavigatedTo
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-01
    • 1970-01-01
    相关资源
    最近更新 更多