我想将一个人员列表绑定到一个DataGrid控件。对象是按需加载的,这意味着我最初只有一个ID列表(int)。在DataGrid本身中,我需要对象(类型为Person)及其所有属性。
为此,我使用了一个将我的List<int>转换为List<Person>的IValueConverter。我想将SelectedItem绑定到一个属性int SelectedId。我不能简单地绑定到Person,因为我的Person类没有ID属性。但是通过值转换,SelectedItem显然是Person类型的。
我是不是应该先加载字典中的对象,然后将其绑定到ItemsSource。然后,SelectedItem将成为一个KeyValuePair。
还有其他可能的方法吗?
发布于 2013-04-29 20:12:22
我认为在列表中提供数据的最好方法是ObservableCollecion<T>。我确信这也是常见的方法,但我没有来源来证明这一点。所以这是一个IMHO语句。
它实现了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。
https://stackoverflow.com/questions/16275576
复制相似问题