2016-09-29 30 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

相关问题