0

我的 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);
        }

然后我从表中得到了实际值。

我的问题是为什么我必须使用overrideToString方法?

4

1 回答 1

3

因为这是 WPF 的正常行为,如果/当您没有指定数据绑定对象(Person在您的情况下是一个实例)应如何格式化/显示时。有多种方法可以解决这个问题,其中一种可能是简单地为DisplayMemberPath您的ListView. 因此,例如,如果您不想覆盖,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)选项...

或者,您可以DataTemplate在您的中使用自定义ListView并指定 aMultiBinding以提供所需的聚合值。这种方法避免了在你的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>
于 2013-09-02T17:24:37.920 回答