如何根据需要正确使用ItemsSource?

时间:2013-04-29 09:46:11

标签: wpf datagrid

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

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

我是否应该首先在Dictionary中加载对象并将其绑定到ItemsSource。然后,SelectedItem将成为KeyValuePair。

还有哪些其他方法?

1 个答案:

答案 0 :(得分:0)

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

它实现了INotifyCollectionChanged接口,以便注意到有关任何更改(添加和删除项目)的视图。有关更多信息,请参阅here。如果集合中的项目(在您的案例Person中)正在实施INotifyPropertyChanged,则系统还会通知视图有关项目本身的更改。有关详细信息,请查看here

因此,如果我在哪里,我会将一个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应用程序肯定有很多优点,但也有一些缺点。例如。在小型项目中可能不值得花费开销。您可以获得概述here