我最近在一个项目中使用Xamarin Forms,我一直在使用TableView来显示从web api检索到的记录的详细信息 . 有时,某些细节不存在,所以我想隐藏显示信息的部分 .
但是,我找不到隐藏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属性并不存在(它存在于像Labels这样的其他元素上) . 我也尝试使用 VisualElement.IsVisible
抛出无效的强制转换异常 . 那么有什么方法可以隐藏这一部分吗?
如果没有办法做到这一点,也许我需要走一条更脏的路径并使用单独的TableViews(我可以使用VisualElement.IsVisible):(
1 回答
您已经遇到了使用TableView的一个缺点,无法通过可绑定属性动态隐藏节 .
在我的项目中,我解决了这个问题:
在页面后面的代码中,我监听用作BindingContext的ViewModel的OnPropertyChanges . 当需要的布尔值更改时,我删除了TableSection中不再需要的单元格 . 当再次需要Cell时,我再次插入它 .
因此,请命名所有部分和单元格,并在页面开始时获取需要更改的单元格,以便以后删除和添加它们 .
小例子代码