问题描述
此代码将为表中的230条记录中的每条记录显示同一行的表名,而不显示字段:
ListView lv = new ListView();
lv.ItemsSource = await App.Database.GetItemsAsync();
StackLayout sl = new StackLayout();
Label ln = new Label();
ln.SetBinding(Label.TextProperty,nameof(ContactsModel.LastName));
Label fn = new Label();
fn.SetBinding(Label.TextProperty,nameof(ContactsModel.FirstName));
sl.Children.Add(ln);
sl.Children.Add(fn);
sl.Children.Add(lv);
Content = sl;
但是添加数据模板会导致空白屏幕
ListView lv = new ListView();
lv.ItemsSource = await App.Database.GetItemsAsync();
var template = new DataTemplate(typeof(ViewCell));
lv.ItemTemplate = template;
StackLayout sl = new StackLayout();
Label ln = new Label();
ln.SetBinding(Label.TextProperty,nameof(ContactsModel.LastName));
Label fn = new Label();
fn.SetBinding(Label.TextProperty,nameof(ContactsModel.FirstName));
sl.Children.Add(ln);
sl.Children.Add(fn);
sl.Children.Add(lv);
Content = sl;
解决方法
首先,这在XAML中更容易实现。但是如果您需要用代码完成
var template = new DataTemplate(() =>
{
Label ln = new Label();
ln.SetBinding(Label.TextProperty,nameof(ContactsModel.LastName));
Label fn = new Label();
fn.SetBinding(Label.TextProperty,nameof(ContactsModel.FirstName));
var stack = new StackLayout();
stack.Children.Add(ln);
stack.Children.Add(fn);
return new ViewCell { View = stack };
});
lv.ItemTemplate = template;