【问题标题】:Filter on ObservableCollection list using lambda expression使用 lambda 表达式过滤 ObservableCollection 列表
【发布时间】:2015-10-26 15:26:49
【问题描述】:

我想知道是否有人告诉我为什么Queries 的过滤是ObservableCollection 的列表在我下面的代码中不起作用? Queries.List.Where(x => x.Name.Equals(value)) 总是有整个列表..没有过滤。我的 lambda 表达式有问题吗?

视图模型:

namespace DataRetrieval.ViewModel
{
    public class QueriesViewModel:BindableBase
    {
        public QueriesViewModel()
        {
            Queries = new Queries();

                for (int i = 0; i < 5; ++i)
                {

                    var query = new Query { Name = "Query "+i.ToString() };

                    Queries.List.Add(query);
                }

        }

        private Queries _queries;
        public Queries Queries
        {
            get { return _queries; }
            set { SetProperty(ref _queries, value); }
        }

        private string _filter1;
        public string Filter1
        {
            get { return _filter1; }
            set { 
                SetProperty(ref _filter1, value);
                filterlist(Filter1);
            }
        }
        private void filterlist(string value)
        {
            Queries.List.Where(x => x.Name.Equals(value));
        }

    }
}

型号:

  public class Queries : BindableBase
    {

        private ObservableCollection<Query> _list;
        public ObservableCollection<Query> List
        {
            get { return _list ?? (_list = new ObservableCollection<Query>()); }
            set { SetProperty(ref _list, value); }
        }

    }
    public class Query:BindableBase
    {
        private string _name;
        public string Name
        {
            get { return _name; }
            set { 
                SetProperty(ref _name, value); 
            }
        }
        private string _type;
        public string Type
        {
            get { return _type; }
            set { SetProperty(ref _type, value); }
        }
        private QDatatables _tables;
        public QDatatables Tables
        {
            get { return _tables; }
            set { SetProperty(ref _tables, value); }
        }

    }

【问题讨论】:

  • Queries.List = Queries.List.Where(x => x.Name.Equals(value));
  • @ValeraScherbakov 我收到以下错误:无法将类型'System.Collections.Generic.IEnumerable'隐式转换为'System.Collections.ObjectModel.ObservableCollection'‌​.存在显式转换(您是否缺少演员表?)

标签: c# wpf mvvm lambda observablecollection


【解决方案1】:
Queries.List = new ObservableCollection<Query>(Queries.List.Where(x => x.Name.Equals(value)));

【讨论】:

    【解决方案2】:

    Queries.List.Where() 返回一个新值,因此要么将其设置回 Queries.List(正如@Valera 在他的评论中所说),要么像这样返回:

    Queries.List = Queries.List.Where(x => x.Name.Equals(value));
    

    return Queries.List.Where(x => x.Name.Equals(value));
    

    编辑:返回不起作用,因为它在一个 void 函数中,你必须改变它,或者使用 @Valera 的方法。

    【讨论】:

    • return 语句在这种情况下不合适。因为他调用了“void”函数。
    • @EthanBrouwer 如果我尝试第一个选项,我会收到以下错误:无法将类型 'System.Collections.Generic.IEnumerable' 隐式转换为 'System.Collections.ObjectModel .ObservableCollection'。存在显式转换(您是否缺少演员表?)
    • @EthanBrouwer 谢谢你的回答也很接近。
    猜你喜欢
    • 2018-06-07
    • 2012-01-08
    • 1970-01-01
    • 2021-01-04
    • 2011-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多