我正在尝试将用户的某些数据插入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中。
答案 0 :(得分:1)
首先,您必须指定从用户模型到使用绑定的TextCell真正需要的内容。您设置为ItemSource用户,但只设置了TextCell Binding,而没有任何变量。例如,尝试设置Class<String> stringClass = String.class
。
其次,尝试使用ViewModel填充数据。在此处了解更多信息:https://docs.microsoft.com/en-us/xamarin/xamarin-forms/enterprise-application-patterns/mvvm
答案 1 :(得分:1)
您需要创建“自定义列表”项目模板以显示对象中的值。
例如,要显示fName,lName和uName,则必须使用以下代码将值绑定到列表项
you can use momentjs to compare dates like this
var moment = require('moment');
var datetime = '2017-07-30T09:29:04.000Z';
var localTime = moment();
var oldTime = moment(datetime);
console.log("Current datetime is older than " + datetime + " by 10 days = " +
(localTime.diff(oldTime, 'days') >= 10));
答案 2 :(得分:1)
最简单的方法是覆盖ToString()
类的User
方法:
public override string ToString()
{
return fName + " " + lName;
}
另一种选择是构建更复杂的DataTemplate
,如@ViralThakker所述。
P.S。如果要在代码中分配ItemsSource="{Binding invitees}"
,则XAML中的ItemsSource
行将不可用。