2017-04-18 63 views
1

我正在使用MVVM模式和Prism的Xamarin Forms項目。使用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> 

本來解決我剛纔使用的問題「可見性」,當沒有按預期我說「的IsEnabled」,它似乎沒有做任何事情。

有沒有辦法在Xamarin(或Prism for Xamarin)中使用布爾值在UI中隱藏Tab而不中斷MVVM?

回答

0

您可能想查看Prism SamplesTabbedNavigation示例演示瞭如何使用INavigatingAwareIEventAggregator初始化選項卡式子項,並在運行時動態添加選項卡。如果您需要更精細的控制,例如您的子頁面的ViewModel中的值確定是否應顯示其他頁面,則可以使用此功能發佈包含IEventAggregator的事件,並在您的TabbedPage中訂閱該事件來處理添加或刪除頁面。

不幸的是IsVisibleIsEnabled實際上並不像TabbedPage那樣以您希望的方式工作。所以你能做到這一點的唯一方法就是直接操縱TabbedPage的Children直接從集合中推送或彈出它們。

+0

謝謝,那絕對是正確的方向。我有這些樣本,但不知道他們最近更新。 遊玩我無法同時動態添加選項卡並將選項卡(不是第一個選項卡)顯示爲默認選項卡。 再次感謝 –