2016-09-29 3 views
0

Ich habe in letzter Zeit für ein Projekt in Xamarin Forms gearbeitet, und ich habe die TableView verwendet, um Details eines Datensatzes anzuzeigen, der aus Web API abgerufen wurde. Manchmal sind bestimmte Details nicht vorhanden, daher möchte ich den Abschnitt ausblenden, in dem die Informationen angezeigt werden.Wie verbirg ich eine TableSection mit XAML in Xamarin Forms?

Allerdings kann ich keine Möglichkeit finden, die TableSection zu verbergen.

Hier einige 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> 

Offensichtlich ist die IsVisible Eigenschaft hat nicht funktioniert und löst eine Ausnahme, weil es nicht existiert (es ist auf andere Elemente wie Labels). Ich habe auch versucht, VisualElement.IsVisible zu verwenden, die eine ungültige Cast-Ausnahme auslöst. Gibt es eine Möglichkeit, diesen Abschnitt zu verbergen?

Wenn es nicht eine Möglichkeit, es zu tun ist, vielleicht brauche ich werde ein dreckiger Weg zu gehen und einen separaten Tableviews verwenden (Es kann ich VisualElement.IsVisible) :(

+0

Ich fürchte, ich nicht mit Xamarin gearbeitet haben, so viel wie Ich mag würde, aber wenn es allgemeine XAML Standards trägt wäre es 'Visibility' Eigenschaft würden Sie Ihren Bool setzen durch einen Konverter, um entweder 'sichtbar' oder 'kollabiert' als der Parameter zu sein. dh; 'Visibility =" Collapsed "' –

+0

Vielen Dank, aber Xamarin Forms verwendet eigene benutzerdefinierte Steuerelemente und die Visibility-Eigenschaft ist nicht verfügbar. Formulare werden zur Laufzeit in native Steuerelemente übersetzt. – Eric

+0

Wirklich? Nun, das ist enttäuschend. Ich frage mich, ob MS, seit sie sie gekauft haben, versuchen könnte, einige der langen Standardkonventionen zu übernehmen. Muss mit Xamarin mehr basteln wenn ich Zeit habe. Prost –

Antwort

2

Nun, Sie getroffen haben . der einzige Nachteil eines Tableview verwenden, nicht in der Lage Abschnitte zu verstecken dynamisch durch bindungsfähige Eigenschaften

In meinem Projekt löste ich das etwa so:

In den Code hinter der Seite, die ich für OnPropertyChanges des Ansichtsmodell hören das wird als BindingContext verwendet Wenn der benötigte boolean sich ändert, entferne ich die Zelle, die wird in der TableSection nicht mehr benötigt. Wenn die Zelle erneut benötigt wird, füge ich sie erneut ein.

Benennen Sie alle Abschnitte und Zellen, und greifen Sie beim Starten der Seite auf die Zellen zu, die geändert werden müssen, damit sie später entfernt und hinzugefügt werden können.

Kleine Beispielcode

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

Ich werde dies als eine Antwort markieren. Ich werde tatsächlich den Weg gehen, ein Gitter nach meinem Willen zu biegen, aber das ist technisch eine Antwort. – Eric

+0

Ja nicht großartig, dass das Steuerelement keine Option eingebaut hat – Depechie

Verwandte Themen