Мне кажется, что ваш 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()
}