2016-09-29 53 views
0

我在Xamarin形式一直致力於爲最近一個項目,我一直在使用的TableView顯示來自網絡API檢索記錄的細節。有時,某些細節不存在,所以我想隱藏顯示信息的部分。如何在Xamarin Forms中使用XAML隱藏TableSection?

但是,我無法找到一個方法來隱藏TableSection。

下面是一些XAML:

<TableView> 
    <TableRoot> 

     ... 

     <!--Contact info--> 
     <TableSection IsVisible="{Binding HasContact}" Title="Contact"> 

      <!--Contact name--> 
      <TextCell Text="{Binding ContactName}" Detail="Primary contact" /> 

      <!--Phone--> 
      <TextCell Text="Phone" 
        Detail="{Binding FormattedContactPhoneNumber}" 
        Command="{Binding BindingContext.DialPhoneCommand, Source={x:Reference MainGrid}}" 
        CommandParameter="{Binding ContactPhoneNumber}"/> 


      <!--Email--> 
      <TextCell Text="Email" 
        Detail="{Binding ContactEmail}" 
        Command="{Binding BindingContext.SendEmailCommand, Source={x:Reference MainGrid}}" 
        CommandParameter="{Binding ContactEmail}"/> 

     </TableSection> 
    </TableRoot> 
</TableView> 

顯然,IsVisible屬性沒有工作,因爲它不存在拋出異常(它存在於其他元素,如標籤)。我也試過使用VisualElement.IsVisible,它會拋出一個無效的轉換異常。那麼有什麼辦法可以隱藏這一部分?

如果沒有辦法做到這一點,也許我需要去倒髒路徑,並使用單獨的TableViews(在那裏,我可以用VisualElement.IsVisible):(

+0

恐怕我還沒有和xamarin工作,就像我想,但如果拿它一般XAML標準這將是'Visibility'財產你乾脆把布爾通過一個轉換器可以是'Visible'或'Collapsed'作爲參數。即; '能見度=「坍塌」' –

+0

謝謝,但是,Xamarin形式使用自己定製的控制和可見性屬性不可用。表單在運行時轉換爲本機控件。 – Eric

+0

真的嗎?那很令人失望。不知道,如果MS購買他們,他們可能會嘗試採用一些長期的標準慣例。當我有時間時,將不得不更多地修改xamarin。乾杯 –

回答

2

那麼你已經打。使用TableView中,不能夠通過綁定屬性動態隱藏部分的一個缺點

在我的項目我解決了這個像這樣:

在代碼頁面的後面我聽視圖模型的OnPropertyChanges用作BindingContext 當需要的布爾變化時,我刪除單元格在TableSection中不再需要。 當再次需要單元時,我再次插入它。

故名所有部分和細胞,並在頁面開始得到那些需要爲參考更改刪除,後來加入它們的細胞保持。

小示例代碼

private void OnViewmodelPropertyChanged (object sender, System.ComponentModel.PropertyChangedEventArgs e) 
{ 
    if (e.PropertyName.Equals("IsBioSecurityAvailable", StringComparison.OrdinalIgnoreCase)) 
    { 
     AdjustBioSecurityHeight(); 
    } 
} 

private void AdjustBioSecurityHeight() 
{ 
    if (!_viewmodel.IsBioSecurityAvailable && GeneralSection.Contains(BioSecurityViewCell)) 
     GeneralSection.Remove(BioSecurityViewCell); 
} 
+0

我會將此標記爲答案。實際上,我將按照自己的意願走彎曲網格的路線,但這在技術上是一個答案。 – Eric

+0

是不是很大,該控件沒有建立選項 – Depechie

相關問題