Wpf 如何正确使用ItemsSource on demand?
我想将人员列表绑定到DataGrid控件。 对象是按需加载的,这意味着最初我只有一个ID列表(int)。在DataGrid本身中,我需要对象(Person类型)及其所有属性 为此,我使用了一个IValueConverter,它将我的Wpf 如何正确使用ItemsSource on demand?,wpf,datagrid,Wpf,Datagrid,我想将人员列表绑定到DataGrid控件。 对象是按需加载的,这意味着最初我只有一个ID列表(int)。在DataGrid本身中,我需要对象(Person类型)及其所有属性 为此,我使用了一个IValueConverter,它将我的列表转换为列表。 我想将SelectedItem绑定到属性int SelectedId。我不能简单地绑定到Person,因为我的Person类没有ID属性。但是通过值转换,SelectedItem显然是Person类型的 我应该首先将对象加载到字典中,然后将其绑定到I
列表
转换为列表
。
我想将SelectedItem绑定到属性int SelectedId
。我不能简单地绑定到Person
,因为我的Person类没有ID属性。但是通过值转换,SelectedItem显然是Person类型的
我应该首先将对象加载到字典中,然后将其绑定到ItemsSource。SelectedItem将是一个KeyValuePair
还有哪些方法是可能的?在列表中提供数据的最佳方法是
可观察集合。我确信这也是一种常见的方式,但我没有证据证明这一点。所以这是一个IMHO声明
它实现了INotifyCollectionChanged
接口,以便在视图中注意到任何更改(添加和删除项)。有关更多信息,请参阅。如果集合中的项目(在您的案例中为Person
)正在实现INotifyPropertyChanged
,则还将通知视图有关项目本身的更改。请查看更多信息
因此,如果我把你放在哪里,我会把一个id属性放入Person
中,并将整个集合加载到observedcollection
中。如果您不能修改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应用程序肯定有很多优点,但也有一些缺点。例如,在较小的项目中,可能存在不值得付出努力的间接费用。你可以得到一个概览。为此,我使用了一个IValueConverter,它可以将我的列表转换为列表-Uhm wOot?您能添加一些代码,以便我们获得更多详细信息吗?关于你的问题,你的方法有效吗?或者你有什么特别的问题吗?你不能用Lazy吗?请参阅@DHN对不起,我忘记应用代码格式了。现在,我将字典
用作项源,将键值对
用作SelectedItem。这种方法是有效的,但我不确定这是否是常见的方法,我更喜欢这种解决方案,因为它遵循常见的MVVM模式。开销是可以管理的,因为ViewModel只是一个包装器。