Мне нужно поместить данные таблицы в ListView (MVVM) - PullRequest
0 голосов
/ 26 февраля 2019

Подключение к базе данных и контекст привязки в порядке.Данные можно вставить в таблицу без проблем.Мне нужно добавить последнюю строку строки моей таблицы в представление списка

<ListView ItemsSource="{Binding YourList}" 
          verticalOptions="FillAndExpand" >
    <ListView.ItemTemplate>
        <DataTemplate>
            <ViewCell>
                <StackLayout Orientation="Horizontal">
                    <Label Text="{Binding Catagoryview}"/>
                    <Label Text="{Binding Date}"/>
                    <Label Text="{Binding Expense}"/>

                </StackLayout>
            </ViewCell>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

Это мой XAML-файл.Я создаю каждое свойство для в обязательном порядке здесь.с полями поддержки.

в моей ViewModel

private void add()
{
    database = new Database();
    var expensedata = database.GetExpenses(id);

    if (expensedata != null)
    {
        Catagoryview = expensedata.Catagory;
        Date= expensedata.Date;
        Expense = expensedata.Expense; 
    }
}

Я знаю, что этот код не идеален.Мне действительно нужно получить последние 10 строк моих данных в виде списка.

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

public AddExpenses GetExpenses(int expense)
{
    return Conn.Table<AddExpenses>().FirstOrDefault(t => t.Id == expense);
}

1 Ответ

0 голосов
/ 26 февраля 2019

Мне кажется, что ваш add метод на самом деле ничего не добавляет.В вашей viewmodel вам нужно иметь публичное свойство YourList, которое распространяется с add.Кроме того, вы получаете только один элемент из вашей базы данных расходов, который не будет работать для добавления 10 элементов.

Насколько я понял, основной вопрос -

Как я могу добавить10 последних элементов из базы данных SQLite в Xamarin.Forms ListView с использованием подхода MVVM.

Несмотря на то, что я не знаю, как и когда вы звоните add, я постараюсь дать ответ о том, как получить и добавить эти элементы.

Прежде всего нам нужно свойство, которое будет хранить ваши элементы в вашей модели представления.В зависимости от ваших требований подойдет либо IEnumerable<AddExpenses>, либо ObservableCollection<AddExpenses>.Я продемонстрирую подход ObservableCollection

ObservableCollection<AddExpenses> _expenses;

public ObservableCollection<AddExpenses> Expenses
{
    get
    {
        if(_expenses == null)
        {
            _expenses = new ObserrvableCollection<AddExpenses>();
        }
        return _expenses;
    }
}

. Вы можете связать это свойство с вашим XAML

<ListView ItemsSource="{Binding Expenses}" 
      VerticalOptions="FillAndExpand">
<!-- What ever -->
</ListView>

, а затем добавить элементы в эту коллекцию с помощью вашего метода AddExpenses (Iне стесняйтесь давать ему более осмысленное имя):

private void AddExpenses()
{
    var database = new Database();
    var expenses = database.GetLastExpenses(numberOfExpenses: 10);

    foreach(var expense in expenses)
    {
        Expenses.Add(expense);
    }
}

Поскольку в нашей коллекции теперь есть объекты типа AddExpenses, нам придется изменить привязку в ListView с *От 1031 * до Category:

<ListView ItemsSource="{Binding YourList}" 
          VerticalOptions="FillAndExpand">
    <ListView.ItemTemplate>
        <DataTemplate>
            <ViewCell>
                <StackLayout Orientation="Horizontal">
                    <Label Text="{Binding Category}"/>
                    <Label Text="{Binding Date}"/>
                    <Label Text="{Binding Expense}"/>
                </StackLayout>
            </ViewCell>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

И последнее, но не менее важное, мы должны реализовать GetLastExpenses (это должно работать, хотя возможно, что есть лучшие варианты)

public AddExpenses[] GetLastExpenses(int numberOfExpenses)
{
    return Conn.Table<AddExpenses>()
               .OrderByDescending(expenses => expenses.Date) 
               .Take(numberOfExpenses)
               .OrderBy(expenses => expenses.Date) // If you need them ordered ascending
               .ToArray()

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