2015-10-19 14 views
6

Sto cercando di ottenere Xamarin Forms per visualizzare un elenco all'interno di un elenco. Ho visto altre persone dire che un ListView nidificato all'interno di un ListView non è supportato. Ho provato ad aggiungere un controllo all'interno di ListView e collegare l'elenco nidificato al controllo, ma questo causa sempre il blocco della mia applicazione ogni volta che provo a collegarlo.Come posso visualizzare un elenco annidato di elementi in Xamarin Forms?

Ho anche scoperto che alcune persone suggeriscono di utilizzare un raggruppamento. Il raggruppamento funziona, tuttavia i problemi che ho riscontrato sono che non posso toccare la sezione di raggruppamento. Anche il raggruppamento non si aggiornerà in tempo reale (questo è un requisito).

Per il risultato finale, mi piacerebbe qualcosa di semplice come:

  • ApartmentName1
  • Indirizzo
  • Responsabile Numero di telefono
  •           Tenant 1, Numero di telefono
  •           Tenant 2, Numero di telefono
  •           Tenant 3, numero di telefono
  • ApartmentName2
  • Indirizzo
  • Numero Manager Telefono
  •           Tenant 1, Numero di telefono
  •           Tenant 2, Numero di telefono
  •           Tenant 3, Numero di telefono

Di seguito è un oggetto di esempio che mi piacerebbe visualizzare nel mio progetto Forme Xamarin.

public class Apartment 
{ 
    public string ApartmentName { get; set; } 
    public string Address { get; set; } 
    public string ManagerPhoneNumber { get; set; } 
    public List<Tenant> Tenants { get; set; } 
} 

public class Tenant 
{ 
    public string FullName { get; set; } 
    public string PhoneNumber { get; set; } 
    public DateTime ContractExpireDate { get; set; } 
} 

Ecco l'Xaml Ho cercato di andare al lavoro

<ContentView> 
    <StackLayout> 
    <ListView x:Name="apartmentListView" HasUnevenRows="True"> 
     <ListView.ItemTemplate> 
     <DataTemplate> 
      <ViewCell> 
      <ViewCell.View> 
       <StackLayout VerticalOptions="StartAndExpand"> 
       <StackLayout Orientation="Horizontal" BackgroundColor="Gray"> 
        <Label HorizontalOptions="StartAndExpand" Text="{Binding ApartmentName}" /> 
        <Label HorizontalOptions="End" Text="{Binding Address}" /> 
       </StackLayout> 
       <Label Text="{Binding ManagerPhoneNumber}" /> 
       <control:TenantViewTemplate Tenants="{Binding Tenants}" /> 
       </StackLayout> 
      </ViewCell.View> 
      </ViewCell> 
     </DataTemplate> 
     </ListView.ItemTemplate> 
    </ListView> 
    </StackLayout> 
</ContentView> 

Sto solo cercando di mostrare un elenco, che contiene un elenco. Sono aperto a qualsiasi suggerimento su come farlo attraverso Xamarin Forms.

risposta

1

Direi di saltare lo XAML e di stenderlo nel modo desiderato.

Usa StackLayouts e \ o Grids e non fare affidamento sulla semi-magia ListViews Databinding. Diverse volte ora ho iniziato con un ListView solo per arrivare a un punto più tardi che ho raschiato è andato con un ForEachLoop. Puoi fare qualsiasi cosa nel codice che puoi fare in XAML e alla fine sarai più felice.

+1

è la risposta o la raccomandazione? –

+1

Non ci credo. Scrivere la tua interfaccia utente in XAML è l'approccio migliore, se prendi alcuni libri vedrai i consigli. –

+0

Leggi l'amico del libro. Non lo cambia. Alla fine Fino a quando c'è l'editor WYSIWYG XAML non ha vantaggi rispetto al codice puro. 1. Esegue più lentamente. 2. Lo sviluppo non ha debugger e poco intellisense. 3. È più dettagliato del codice, assumendo che si mantenga pulito il proprio codice. Situazioni come questa si presentano sempre e se l'OP avesse usato C# per iniziare, questo non sarebbe mai stato un problema. – David

4

Se dovessi visualizzare un elenco di elementi diversi utilizzerei probabilmente un TableView invece di un ListView. TableViews non sono database, quindi devi costruirli manualmente, ma ti permettono di avere diversi tipi di celle a seconda dei dati visualizzati in ogni riga.

Se si desidera attenersi a ListView raggruppato, è possibile creare una vista di intestazione di gruppo personalizzata contenente un pulsante (o un altro elemento) in grado di rispondere ai gesti di tocco.

+0

domanda chiara ma è odore come UWP (o WPF) xaml. abbiamo la stessa brutta esperienza. Non ho tempo da perdere per provare senza xaml, dovrei provare manualmente listview child vincolante? –