Не могу вставить данные из Sqlite в ListView - PullRequest
0 голосов
/ 25 декабря 2018

Я пытаюсь вставить определенные фрагменты данных пользователя в ListView, но не могу заставить их отображаться.

Вот так выглядит мой код.Проблема заключается в последних двух классах (Invite_Page.xaml.cs и Invite_Page.xaml), но я также вставил свои заметки из других классов, которые могут иметь отношение .:

User.cs:

public class User {

    public string fName { get; set; }

    public string lName { get; set; }

    public string uName { get; set; }

    public string Pw { get; set; }

    // public string cls { get; set; }

}

fName и lName являются строками

DatabaseManager.cs:

public class DatabaseManager
{
   SQLiteConnection dbConnection;
   public DatabaseManager()
   {
      dbConnection = DependencyService.Get<IDBInterface>().CreateConnection();
   }

   public List<User> GetAllUsers()
      return dbConnection.Query<User>("Select * From [User]");

   public int SaveUser(User aUser)
   {
      //dbConnection.CreateTable<User>();
      //return 1;
      return dbConnection.Insert(aUser);
   }

   public List<User> GetAllNames()
      return dbConnection.Query<User>("Select fName, lName From [User] ORDER BY fName;");

   //.....

Invite_Page.xaml:

<ListView 
      x:Name="invitees"
      SeparatorColor="White"
      BackgroundColor="Transparent"
      ItemsSource="{Binding invitees}"
      IsGroupingEnabled="true"
      IsPullToRefreshEnabled="true"
      ItemTapped="Handle_ItemTapped">
   <ListView.ItemTemplate>
      <DataTemplate>
         <TextCell Text="{Binding}" TextColor="White"/>
      </DataTemplate>
   </ListView.ItemTemplate>
</ListView>

Invite_Page.xaml.cs:

DatabaseManager DBM = new DatabaseManager();

   // List<User> Invitees(String SearchText = null) 
   // {
       // invitees.ItemsSource = DBM.GetAllNames();
       // return Invitees();
   // }
   protected override void OnAppearing()
   {
      base.OnAppearing();
      invitees.ItemsSource = DBM.GetAllNames();
   }

В коде Invite_Page.xaml.cs вы можете видеть, что я пытался вводить данные, используя закомментированный код.В результате ничего не появилось в списке.Но со вторым методом, который не был закомментирован, результатом было то, что «RoseySports.User» был помещен в ListView.Я пытаюсь сделать так, чтобы значения fName и lName были объединены в одну строку и помещены в ListView.

This is what it looks like at the moment

Ответы [ 3 ]

0 голосов
/ 25 декабря 2018

Вам необходимо создать шаблон элемента Custom List для отображения значения из вашего объекта.

Например, если вы хотите отобразить fName, lName и uName, вам придется использовать приведенный ниже код для привязки значений к элементу списка

             <DataTemplate>
                    <ViewCell>

                            <StackLayout Orientation="Vertical" Padding="10">
                                 <Label Text="{Binding fName}" TextColor="White"/>
                                 <Label Text="{Binding lName}" TextColor="White"/>
                                 <Label Text="{Binding uName}" TextColor="White"/>
                            </StackLayout>

                    </ViewCell>
                </DataTemplate>
0 голосов
/ 25 декабря 2018

Самый простой способ - переопределить ToString() метод класса User:

public override string ToString()
{
   return fName + " " + lName;
}

Другой вариант - построить более сложную DataTemplate, как упоминал @ViralThakker.

PS Строка ItemsSource="{Binding invitees}" в вашем XAML непригодна, если вы назначаете ItemsSource в коде.

0 голосов
/ 25 декабря 2018

Во-первых, вы должны указать, что вы действительно хотите от модели User до TextCell, который вы используете для привязки.Вы устанавливаете как ItemSource Users, но вы просто устанавливаете привязку TextCell без какой-либо переменной.Попробуйте установить Text={Binding fName} например.Во-вторых, попробуйте использовать ViewModel для заполнения данных.Узнайте больше здесь: https://docs.microsoft.com/en-us/xamarin/xamarin-forms/enterprise-application-patterns/mvvm

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...