2016-05-26 6 views
0

Gerade jetzt, wenn ich meine Daten (die Bilder) sammeln, bekomme ich 3 des gleichen Bildes in der gleichen Zeile. Ich möchte, dass das Bild in meiner Listenansicht zusammenfließt, indem es nebeneinander platziert wird (3 eindeutige Bilder in jeder Zeile) und dann eine Zeile nach unten bewegt wird.Wie kann ich die Bilder, die ich sammle, in eine "instagram" Listenansicht bringen?

Dies ist mein aktueller Code:

new List<info> imagesList = new List<info>(); 

protected override void OnAppearing() 
    { 
     imagesListview.RowHeight = (int)(this.Width/3); 
    } 

async void loadPhotos() 
    { 
     var getInfo = await phpApi.getPhotos(); 

     imagesListview.ItemsSource = null; 
     imagesList = new List<info>(); 
     foreach (var items in getInfo["results"]) { 

      imagesList.Add (new info() { 
       theimage = items ["Photo"].ToString(), 
       theimage2 = items ["Photo"].ToString(), 
       theimage3 = items ["Photo"].ToString(), 
      }); 
     } 
     imagesListview.ItemsSource = imagesList; 


    } 

    public class info 
    { 
     public string theimage {get; set;} 
     public string theimage2 {get; set;} 
     public string theimage3 {get; set;} 

    } 

XAML:

<ListView x:Name="imagesListview" RowHeight="100" AbsoluteLayout.LayoutBounds="0.0, 1.0, 1.0, 0.75" AbsoluteLayout.LayoutFlags="All"> 
      <ListView.ItemTemplate> 
      <DataTemplate> 
       <ViewCell> 
         <ViewCell.View> 
          <AbsoluteLayout> 
           <Image Source="{Binding theimage}" AbsoluteLayout.LayoutBounds="0.0, 0.0, 0.333, 1.0" AbsoluteLayout.LayoutFlags="All" Aspect = "AspectFill" /> 
           <Image Source="{Binding theimage2}" AbsoluteLayout.LayoutBounds="0.5, 0.0, 0.333, 1.0" AbsoluteLayout.LayoutFlags="All" Aspect = "AspectFill" /> 
           <Image Source="{Binding theimage3}" AbsoluteLayout.LayoutBounds="1.0, 0.0, 0.333, 1.0" AbsoluteLayout.LayoutFlags="All" Aspect = "AspectFill" /> 
          </AbsoluteLayout> 
         </ViewCell.View> 
       </ViewCell> 
      </DataTemplate> 
     </ListView.ItemTemplate> 
     </ListView> 
+0

Ihre Info-Klasse muss in der Lage sein, drei verschiedene Bilder zu verweisen, die Sie gegen binden können. Wenn Sie Ihre Liste erstellen, müssen Sie Ihre Bilder in Dreiergruppen aufteilen. – Jason

+0

also erstellen Sie 3 verschiedene Bilder-Strings und machen Sie das: 'theimage = items [" Photo "]. ToString(), theimage2 = items [" Photo "]. ToString(), theimage3 = Objekte [" Photo "]. ToString() 'und sie binden sie an jeden in XAML? – medvedo

+0

Ich habe dieses Code-Snippet übrigens: 'protected override void OnAppearing() { imagesListview.RowHeight = (int) (this.Width/3); } ' Hinzugefügt es zu der Post als auch – medvedo

Antwort

1
int ndx = 0; 
Info info = null; 

foreach (var items in getInfo["results"]) { 

    if (ndx == 0) { 
    info = new Info(); 
    info.theimage = items ["Photo"].ToString(); 
    ndx++; 
    } else 

    if (ndx == 1) { 
    info.theimage2 = items ["Photo"].ToString(); 
    ndx++; 
    } else 

    if (ndx == 2) { 
    info.theimage3 = items ["Photo"].ToString(); 
    imagesList.Add(info); 
    info = null; 
    ndx = 0; 
    } 
} 

if (info != null) { 
    imagesList.Add(info); 
} 
+0

noch 3 in der gleichen Reihe. sec wird noch mehr experimentieren – medvedo

+0

Ja ich kopiere deinen Code und bekomme 3 von dem gleichen Bild in Folge noch. – medvedo

+0

Sie müssen Ihren Code debuggen und überprüfen, dass jedes Element wirklich eine eindeutige URL ist, und dass sie zusammen in Informationen richtig gruppiert werden – Jason

Verwandte Themen