WPF- ObservableCollection的多个视图

时间:2011-07-14 17:18:23

标签: wpf collectionviewsource

我有一个包含两个CollectionViews的viewmodel。

我用于导航和数据输入/编辑的一个。 另一个我想用于过滤目的,并在表单上的一些Listview中显示过滤。

当我在observablecollection上应用过滤时,我不希望主视图(用于DataEntry目的)受到影响。

提前致谢!

2 个答案:

答案 0 :(得分:5)

只要您使用单独的集合视图,更改一个不会影响另一个。这是集合视图的重点 - 它们是对同一集合的独立视图。

答案 1 :(得分:0)

好的,明白了!并继续提出同样的想法。但是当我这样做时,我得到Error ="调用线程无法访问此对象,因为另一个线程拥有它。"。因此,我的过滤无效。以下是代码 -

    public ICollectionView Clients { get; set; } //Used for Data-navigation/modification
    public ListCollectionView CodeView { get; set; } // to be used for filteration purpose on form.

    string searchText = String.Empty;
    public string CompanyCodeSearch
    {
        get { return searchText; }
        set
        {
            try
            {
                searchText = value;
                OnPropertyChanged("CompanyCodeSearch");
                CodeView.Filter = new Predicate<object>(cmFilterData);
            }
            catch (Exception ex)
            {

            }
        }
    }


   private bool cmFilterData(object item)
    {
        bool _filteredData = false;
        try
        {
            var value = (item as cntClient);
            if (value == null || value.CompanyCode == null)
                return false; 

            _filteredData = value.CompanyCode.StartsWith(this.CompanyCodeSearch);
            return _filteredData;
        }
        catch (Exception ex)
        {
            return false; 
        }
    }