ICollectionView获取特定对象

时间:2014-02-23 14:08:40

标签: c# wpf xaml mvvm

我正在使用ICollectionView来保存对象列表。 根据一些人的说法,我需要从中获取一个特定的对象 对象属性,有没有办法做到这一点?

例如,对象是User,我需要提供 name获取此对象。我该怎么办?

private readonly ICollectionView usersCollectionView;

public MappingViewModelView()
{
    _UsersList = new ObservableCollection<User>
    {
        new User {Name = "Jhon"},

    };
    usersCollectionView = CollectionViewSource.GetDefaultView(_UsersList);
    UsersCollectionView.SortDescriptions.Add(new SortDescription("Name", ListSortDirection.Ascending));
}

2 个答案:

答案 0 :(得分:4)

SourceCollection 实例获取 ICollectionView 并将其转换为您的特定类型(在您的情况下为User),您可以使用LINQ扩展方法得到你的结果。

User user = usersCollectionView.SourceCollection.Cast<User>()
                 .FirstOrDefault(p => p.Name == "Jhon");

使用OfType<T>扩展方法:

User user = usersCollectionView.SourceCollection.OfType<User>()
                 .FirstOrDefault(p => p.Name == "Jhon");

您必须添加 System.Linq 命名空间才能使用Cast和FirstOrDefault扩展方法。

答案 1 :(得分:1)

使用 ICollectionView SourceCollection属性获取 ObservableCollection

User john = ((ObservableCollection<User>)usersCollectionView.SourceCollection).Where( x=> x.Name == "Jhon").FirstOrDefault();