2016-07-15 8 views
0

Ich möchte Daten anzeigen, die sich auf der Liste und auch für die E-Mail befinden. Ich muss den Vice President und ich möchte den Link ihrer Email öffnen bzw. auf eine externe E-Mail-Plattform öffnen. Allerdings scheint der Code nicht richtig zu funktionieren, er öffnet nur eine einzige E-Mail für den Vizepräsidenten und das gesamte Etikett, das ihn enthält, scheint darauf zu reagieren.Anzeigen von Daten in der Liste Xamarin.Forms

Dies ist der Screenshot davon.

enter image description here

Mein Xmal Code

<Label Text="Vice-President:" FontSize="18" FontAttributes="Bold" XAlign="Center" TextColor="Black"/> 
       <StackLayout x:Name="vpDetails"> 

       </StackLayout> 

Mein C# -Code

foreach (var item in leaderDetail) 
     { 
      Boolean IsPresident = item.IsPresident; 

      if (IsPresident == true) 
      { 
       lbPresidentName.Text = item.Name; 
       btnPresidentEmail.Text = item.Email; 

       var tgrPresident = new TapGestureRecognizer(); 
       tgrPresident.Tapped += (s, e) => Device.OpenUri(new Uri("mailto:" + item.Email)); 
       btnPresidentEmail.GestureRecognizers.Add(tgrPresident); 
      } 
      else 
      { 
       vpDetails.Children.Add(new Label { Text = item.Name ,FontSize=14, HorizontalOptions = LayoutOptions.Center}); 

       vpDetails.Children.Add(new Label { Text = item.Email, FontSize=14, HorizontalOptions = LayoutOptions.Center, x:name="lbvPresident1Email"}); 

       //lbvPresident1Name.Text = item.Name; 
       //lbvPresident1Email.Text = item.Email; 

       var tgrVPEmail = new TapGestureRecognizer(); 
       tgrVPEmail.Tapped += (s, e) => Device.OpenUri(new Uri("mailto:" + item.Email)); 
       lbvPresident1Email.GestureRecognizers.Add(tgrVPEmail); 
      } 

     } 

Antwort

0

Um dieses Problem zu lösen, müssen Sie das StackLayout als Container verwenden. Erstelle eine var of Label und füge sie in die foreach-Schleife ein.

DetailedClub.xaml

<StackLayout x:Name="vpDetails"></StackLayout> 

DetailedClub.xaml.cs

foreach (var item in leaderDetail) 
{ 
    //Create a new label for the Email 
    var VpEmail = new Label { Text = item.Email, FontSize = 14, HorizontalOptions = LayoutOptions.Center }; 

    vpDetails.Children.Add(new Label { Text = item.Name ,FontSize=14, HorizontalOptions = LayoutOptions.Center}); 

    vpDetails.Children.Add(VpEmail); 

    var tgrVPEmail = new TapGestureRecognizer(); 
    tgrVPEmail.Tapped += (s, e) => Device.OpenUri(new Uri("mailto:" + item.Email)); 
    VpEmail.GestureRecognizers.Add(tgrVPEmail); 
} 
1

Dies liegt daran, für mehrere Vizepräsidenten, werden Sie einfach den Text auf dem Etikett ein anhängt. Dies bedeutet, dass Sie zunächst einen Vize-Präsidenten und seinen Gestenerkenner mit seiner E-Mail hinzufügen und den Text für den anderen anhängen und einen weiteren Gestenerkenner registrieren. Dann wird die Tippgeste für die erste erkannt.

Was nach der Ausführung des gesamten Codes passiert, ist, dass das Label lbvPresident1Name alle Namen und E-Mails enthält, die für den Vize-Präsidenten stehen und mehrere GestureRecognizer (einen für jeden Vizepräzident).

Um dieses Problem zu beheben, sollten Sie zum Beispiel eine Liste von Vizepräsidenten erstellen und jeden Vizepräsidenten als Element hinzufügen oder einen Container hinzufügen und die Labels für jeden von ihnen im laufenden Betrieb erstellen.

ein Listview erstellen in Xamarin.Forms in der Dokumentation - https://developer.xamarin.com/samples/xamarin-forms/WorkingWithListview/

einen Container zu erstellen, auf die Sie Artikel on the fly aus dem Code hinzufügen können, wird StackLayout Komponente die beste Wahl in Ihrem Szenario sein. Sie werden nur eine StackLayout an Stelle der aktuellen Bezeichnung einfügen und dann Etiketten in der foreach-Schleife erstellen und sie in den StackLayout mit der Children.Add Methode einfügen.

Verwandte Themen