1

我想将人员列表绑定到 DataGrid 控件。对象是按需加载的,这意味着最初我只有一个 ID 列表(int)。在 DataGrid 本身中,我想要具有所有属性的对象(Person 类型)。

为此,我使用了一个 IValueConverter 将 my 转换List<int>List<Person>. 我想将 SelectedItem 绑定到一个属性int SelectedId。我不能简单地绑定到Person,因为我的 Person 类没有 ID 属性。但是通过值转换,SelectedItem 显然是 Person 类型。

我是否应该最初将对象加载到字典中并将其绑定到 ItemsSource。SelectedItem 将是一个 KeyValuePair。

还有哪些可能的方法?

4

1 回答 1

0

恕我直言,在列表中提供数据的最佳方式是ObservableCollecion<T>. 我确信这也是常见的方式,但我没有证据证明这一点。所以这是一个恕我直言的声明。

它实现了INotifyCollectionChanged接口,因此可以注意到视图的任何更改(添加和删除项目)。有关更多信息,请参阅此处。如果集合中的项目(在您的情况下Person)正在实施INotifyPropertyChanged,则视图也会收到有关项目本身更改的通知。请在此处查看更多信息。

因此,如果我在您所在的位置,我会将 id 属性放入Person并将整个集合加载到ObservableCollection. 如果您无法修改,则Person可以创建一个包装器,例如

public class PersonVm
{
    public int Id { get; set; }
    public Person Person { get; set; }

    public PersonVm(int id, Person person)
    {
        Id = id;
        Person = person;
    }
}

INotifyPropertyChanged如果您想拥有项目的通知功能,您必须自己添加实现。

顺便说一句,我在这里描述的是 MVVM 模式的典型实现。用它来实现 WPF 应用程序肯定有很多优点,但也有一些缺点。例如,在较小的项目中可能不值得付出的开销。您可以在此处获得概述。

于 2013-04-29T12:12:22.253 回答