如何在Xamarin表单中隐藏带有XAML的表节?
我最近一直在为一个项目使用Xamarin表单,我一直在使用TableView显示从web api检索到的记录的详细信息。有时,某些细节不存在,所以我想隐藏显示信息的部分 但是,我找不到隐藏表部分的方法 以下是一些XAML:如何在Xamarin表单中隐藏带有XAML的表节?,xaml,mvvm,xamarin,xamarin.forms,Xaml,Mvvm,Xamarin,Xamarin.forms,我最近一直在为一个项目使用Xamarin表单,我一直在使用TableView显示从web api检索到的记录的详细信息。有时,某些细节不存在,所以我想隐藏显示信息的部分 但是,我找不到隐藏表部分的方法 以下是一些XAML: <TableView> <TableRoot> ... <!--Contact info--> <TableSection IsVisible="{Binding HasCo
<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
,它抛出了一个无效的强制转换异常。有没有办法隐藏这一部分
如果没有办法做到这一点,也许我需要走一条更脏的路,使用单独的TableView(在那里我可以使用VisualElement.IsVisible):(您遇到了使用TableView的一个缺点,无法通过可绑定属性动态隐藏节 在我的项目中,我这样解决了这个问题: 在页面的代码隐藏中,我监听用作BindingContext的ViewModel的OnPropertyChanges。 当所需的布尔值发生变化时,我将删除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);
}
您遇到了使用TableView的一个缺点,即无法通过可绑定属性动态隐藏节 在我的项目中,我这样解决了这个问题: 在页面的代码隐藏中,我监听用作BindingContext的ViewModel的OnPropertyChanges。 当所需的布尔值发生变化时,我将删除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);
}
恐怕我还没有像我所希望的那样与xamarin一起工作,但是如果它带有通用的xaml标准,那么它将是
可见性
属性,您可以将您的bool通过一个转换器,使其作为参数可见
或折叠
谢谢,但是,Xamarin表单使用自己的自定义控件,而Visibility属性不可用。表单在运行时被转换为本机控件。真的吗?这太令人失望了。不知道自从MS购买了表单之后,他们是否会尝试采用一些长的标准约定。当我有了ti时,他们将不得不对Xamarin进行更多的修改我。干杯我恐怕没有像我所希望的那样与xamarin合作,但是如果它带有通用的xaml标准,那么它将是可见性
属性,您可以将您的bool通过一个转换器,使其作为参数可见
或折叠
谢谢,但是,Xamarin表单使用自己的自定义控件,而Visibility属性不可用。表单在运行时被转换为本机控件。真的吗?这太令人失望了。不知道自从MS购买了表单之后,他们是否会尝试采用一些长的标准约定。当我有了ti时,他们将不得不对Xamarin进行更多的修改我。干杯。我会把这标记为一个答案。我实际上会按照我的意愿弯曲网格,但这在技术上是一个答案。是的,控制没有内置选项不太好。我会将这标记为一个答案。我实际上会按照我的意愿弯曲网格,但这在技术上是一个答案。是的,这不太好ol没有内置选项