首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何正确使用ItemsSource on demand?

如何正确使用ItemsSource on demand?
EN

Stack Overflow用户
提问于 2013-04-29 17:46:11
回答 1查看 118关注 0票数 1

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

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

我是不是应该先加载字典中的对象,然后将其绑定到ItemsSource。然后,SelectedItem将成为一个KeyValuePair。

还有其他可能的方法吗?

EN

Stack Overflow用户

回答已采纳

发布于 2013-04-29 20:12:22

我认为在列表中提供数据的最好方法是ObservableCollecion<T>。我确信这也是常见的方法,但我没有来源来证明这一点。所以这是一个IMHO语句。

它实现了INotifyCollectionChanged接口,这样视图就会注意到任何更改(添加和删除项)。有关更多信息,请参阅here。如果集合中的项(在您的示例中为Person )正在实现INotifyPropertyChanged,则视图还将收到有关项本身的更改的通知。有关更多信息,请查看here

因此,如果我在这里,我会将id属性放到Person中,并将整个集合加载到ObservableCollection中。如果不能修改Person,可以创建一个包装器,如下所示

代码语言:javascript
运行
复制
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

票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16275576

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档