[英]XAML Overriding ToString
我的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();
现在,最初我是在列表视图(测试)中获得非常通用的文本:
win8.Model.databaseTables + Person
但是,当我在模型中添加以下内容时:
public override string ToString()
{
return string.Format("{0} - {1} : {2} -- {3}", personName, personEmail, personPhone, personDOB);
}
然后我从表中获得了实际值。
我的问题是为什么我必须override
ToString
方法?
因为这是WPF的正常行为,如果/未指定如何格式化/显示数据绑定对象(在您的情况下为Person
的实例)时,这是WPF的正常行为。 有多种解决方法,其中一种可能是简单地为ListView
DisplayMemberPath
指定一个值。 因此,例如,如果您不想覆盖ToString()
则可以在Person
类中创建一个成员属性,该成员属性返回所需的字符串并将其指定为DisplayMemberPath
。
有总结的人
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)选项...
另外,您可以在ListView
使用自定义DataTemplate
并指定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>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.