我想将一个人列表绑定到DataGrid控件。 对象按需加载,这意味着初始我只有一个ID列表(int)。在DataGrid本身,我想要具有所有属性的对象(类型为Person)。
为此,我使用了IValueConverter将List<int>
转换为List<Person>
。
我想将SelectedItem绑定到属性int SelectedId
。我不能简单地绑定到Person
,因为我的Person类没有ID属性。但是使用值转换,SelectedItem显然是Person类型。
我是否应该首先在Dictionary中加载对象并将其绑定到ItemsSource。然后,SelectedItem将成为KeyValuePair。
还有哪些其他方法?
答案 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。