2
votes

Liaison de modèle de données ListView dans les formulaires Xamarin

J'ai essayé de remplir le modèle de données dans la vue de liste mais il n'affiche rien. Mon code ci-dessous:

public partial class ScoreDisplay : ContentPage
{
    public static List<int> Score = new List<int>();
    public static List<string> Name = new List<string>();
     public string[] nme = new string[10];

    public static int[] scr = new int[10];

    public ObservableCollection<Data> mySource{get;set;}
    public ScoreDisplay()
    {
        InitializeComponent();
        BindingContext = this;


        nme = Name.ToArray();
        scr=Score.ToArray();

        mySource = new ObservableCollection<Data>();
        for(int i=0;i<nScore.Count;i++)
        {
            mySource.Add(nnew Data {name = nme[i], score = 
            scr[i].ToString()});
        }
        listView.ItemsSource = mySource;
    }  
}

public class Data
{
   public string name { get; set; }
   public string score { get; set; } 
}

<?xml version="1.0" encoding="UTF-8"?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" 
         xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
         x:Class="BlueDemo.ScoreDisplay">
<ContentPage.Content>                 
       <StackLayout> 
        <ListView x:Name="listView" Grid.ColumnSpan="2">
           <ListView.ItemTemplate>
           <DataTemplate>
              <ViewCell>
                <Grid>
                  <Grid.ColumnDefinitions>
                     <ColumnDefinition Width="0.7*"/> 
                     <ColumnDefinition Width="0.3*"/> 
                  </Grid.ColumnDefinitions>     
                  <Label Text="{Binding name}" FontAttributes="Bold"/>
                  <Label Text="{Binding score}" Grid.Column ="1"/>                
                </Grid>
              </ViewCell>
          </DataTemplate>
          </ListView.ItemTemplate>
        </ListView>
    </StackLayout>
</ContentPage.Content>    

J'ai deux listes ( Nom et score ) qui reçoivent le valeur d'une autre page. Je ne sais pas comment lier chaque valeur en eux avec le nom et le score de listview. EDIT: Code de travail


2 commentaires

Hé, ça marche?


Je n'ai pas encore essayé. Quelque chose d'autre est arrivé. Je vous ferai savoir dès que j'aurai terminé.


3 Réponses :


0
votes

vous avez manqué le ItemSsource à lier dans ListView xaml. Ajoutez cette ligne au lieu de

<ListView x:Name="listView" ItemsSource="{Binding DataDisplay}" Grid.ColumnSpan="2">

à

<ListView x:Name="listView" Grid.ColumnSpan="2">


9 commentaires

Salut @Prashanth, c'est là dans la partie cs.


mais vous devez également initialiser en Xaml. C'est une collection qui lie une propriété sous des valeurs clés. Essaye celui-là


Vérifiez que votre nom et votre score ont des valeurs ou null dans DataDisplay


Cela fonctionne lorsque j'initialise le nom et le score via un tableau. Changement de la liste en tableau, puis de nouvelles données {name = Name [0], score = Score [0]} mais ce n'est pas l'approche que je veux suivre car la liste changera toujours en nombre.


D'où vous transmettez les données au nom. Vous créez en utilisant ObservableCollection .


C'est sur l'autre page où je prends des valeurs de la base de données, puis je les mets dans une liste, puis que les données de la liste sont passées à cette "Liste statique publique Name = new List ();" Maintenant, si je change cette liste de noms en tableau et que je remplis ensuite "liste publique nom {get; set;}" un par un, cela fonctionne. Je dois changer la liste de noms en nom de chaîne mais.


Pour cela, créez une classe Model pour les valeurs que vous prenez à partir de Database, lorsque vous appelez la page, définissez le constructeur du même modèle. Donc, ici, vous obtenez toutes les données de la base de données et chargez-les simplement


D'accord. Je vais essayer.


attendez que je mette à jour ma réponse en utilisant la classe de modèle depuis l'accès à la base



3
votes

Cause:

Label.Text est une chaîne. Mais dans votre classe Data , le nom de la propriété est une List .

Solution:

Reportez-vous au code suivant.

public class Data
{
    public string name { get; set; }
    public string score { get; set; }
}

public ObservableCollection<Data> mySource { get; set; }

List<int> ScoreList = new List<int>();
List<string> NameList = new List<string>();    

public ScoreDisplay ()
{
  InitializeComponent();

  BindingContext = this;

  NameList.Add("jack");
   // or you can set the list with  the other part of the app

  ScoreList.Add(60);
   //...

  mySource = new ObservableCollection<Data>();

  for (int i=0;i<ScoreList.Count;i++)
   {
      mySource.Add(new Data { name = NameList[i], score = ScoreList[i].ToString()});
   }


  listView.ItemsSource = mySource;
}


0 commentaires

0
votes
<StackLayout>
    <ListView x:Name="listView">
        <ListView.ItemTemplate>
            <DataTemplate>
                <ViewCell>
                    <Grid>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="0.7*" />
                            <ColumnDefinition Width="0.3*" />
                        </Grid.ColumnDefinitions>

                        <Label Text="{Binding name}" Grid.Column="0"
                               FontAttributes="Bold" />
                        <Label Text="{Binding score}"
                               Grid.Column="1" />
                    </Grid>
                </ViewCell>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>
</StackLayout>

0 commentaires