数据库连接和绑定上下文都可以。数据可以毫无问题地插入表中。我需要将表数据行的最后一个添加到列表视图
<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);
}
答案 0 :(得分:0)
对我来说,似乎您的add
方法实际上并未添加任何内容。在您的视图模型中,您将需要有一个公共属性YourList
,该属性随add
一起传播。此外,您从费用数据库中仅获得一项,而添加10项无效。
据我了解,核心问题是
如何使用MVVM方法将SQLite数据库中的最后10个项目添加到Xamarin.Forms
ListView
中。
不管我不知道如何以及何时致电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
方法向该集合中添加项目(我可以随意给它起一个更有意义的名称):
private void AddExpenses()
{
var database = new Database();
var expenses = database.GetLastExpenses(numberOfExpenses: 10);
foreach(var expense in expenses)
{
Expenses.Add(expense);
}
}
由于您的集合中现在有类型为AddExpenses
的对象,所以我们必须将ListView
中的绑定从Categoryview
更改为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()
}