我的ViewModel
中有以下内容 public IEnumerable<win8Chores.Model.databaseTables.Person> selectAllPerson()
{
using (var db = new SQLiteConnection(dbPath))
{
return db.Query<win8Chores.Model.databaseTables.Person>("select personId,personName,personEmail,personDOB from Person");
//return db.Table<Person>();
}
}
我有一个模特:
public class Person
{
[PrimaryKey, AutoIncrement]
public int personId { get; set; }
[MaxLength(25)]
public string personName { get; set; }
[MaxLength(50)]
public string personEmail { get; set; }
[MaxLength(13)]
public string personPhone { get; set; }
public DateTime personDOB { get; set; }
public Boolean isPersonActive { get; set; }
}
在我的视图中,我有以下内容:
DataContext = VM;
test.ItemsSource = VM.selectAllPerson();
现在最初我的listview(测试)非常通用的文字:
win8.Model.databaseTables +人
但是当我将以下内容添加到我的模型中时:
public override string ToString()
{
return string.Format("{0} - {1} : {2} -- {3}", personName, personEmail, personPhone, personDOB);
}
然后我从表中得到了实际值。
我的问题是为什么我需要override
ToString
方法?
答案 0 :(得分:3)
因为这是WPF的正常行为,如果/当您没有指定数据绑定对象(在您的情况下为Person
的实例)应如何格式化/显示时。有多种方法可以解决此问题,其中一种方法可能是为DisplayMemberPath
指定ListView
的值。因此,例如,如果您不想覆盖ToString()
,那么您可以在Person
类中创建一个成员属性,该属性返回所需的字符串并将其指定为DisplayMemberPath
。 / p>
有摘要的人
public class Person
{
public int personId { get; set; }
public string personName { get; set; }
public string personEmail { get; set; }
public string personPhone { get; set; }
public DateTime personDOB { get; set; }
public Boolean isPersonActive { get; set; }
public string Summary
{
get { return string.Format("{0} - {1} : {2} -- {3}", personName, personEmail, personPhone, personDOB); }
}
}
<强> XAML 强>
<ListView ... DisplayMemberPath="Summary"/>
另一个(纯XAML)选项......
或者,您可以在DataTemplate
中使用自定义ListView
并指定MultiBinding
以提供所需的汇总值。这种方法避免了在您Person
类上引入新成员的需要。
<ListView ItemsSource="{Binding Items}">
<ListView.View>
<GridView>
<GridViewColumn>
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBlock>
<TextBlock.Text>
<MultiBinding StringFormat="{}{0} - {1} : {2} -- {3}">
<Binding Path="personName" />
<Binding Path="personEmail" />
<Binding Path="personPhone" />
<Binding Path="personDOB" />
</MultiBinding>
</TextBlock.Text>
</TextBlock>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView>
</ListView.View>
</ListView>