代码之家  ›  专栏  ›  技术社区  ›  Siegfried.V

更新另一个ObservableCollection的结果ObservableCollection

  •  0
  • Siegfried.V  · 技术社区  · 6 年前

    不好意思,我不知道怎么回答这个问题:

    我有两个收藏

    ObservableCollection我的主列表 是可观察的集合,其中存储了我的所有对象。

    ObservableCollection<T> MyFilteredList = new ObservableCollection(MyMainList.Where(x=>Condition))
    

    是根据某些参数筛选的ObservableCollection。

    在某一时刻,我需要添加或删除mymainlist中的对象,但myfilteredlist不会自动更新。

    我需要一直这样做:

    MyMainList.Add(newObject);
    MyFilteredList.Add(newObject);
    

    有没有一种方法可以在一行中完成所有这些操作,所以当我修改mymainlist时,myfilteredlist将自动更新?

    编辑:要回答阿德里亚诺·雷佩蒂的问题,当我打开窗口时,我会加载所有的对象(所以我不需要每次更改过滤器时都重新加载数据库)。 我有三种不同的过滤器: -1个“代办”组合框(合同清单) -“阶段”组合框(分包合同清单) -1文本框“filter”(如果我只想查看名称中包含该文本的对象)。

    当我更改第一个组合框的选择时,我将更新分包合同列表,并更新已筛选的程序集列表。

    private Affaire selectedAffaire;
    public Affaire SelectedAffaire
    {
       get { return selectedAffaire; }
       set
       {
          selectedAffaire = value;
          this.NotifyPropertyChanged("SelectedAffaire");
          if (value != null)
          {
             GetListPhaseInContract(); //I update the list of subcontracts in 2nd Combobox
          }
          UpdateListAssemblages(); // I update MyFilteredList
       }
    }
    

    当我更改第二个组合框(分包合同)的选择时,我更新myfilteredlist的列表。

    private Phase selectedPhase;
    public Phase SelectedPhase
    {
       get { return selectedPhase; }
       set
       {
           selectedPhase = value;
           this.NotifyPropertyChanged("SelectedPhase");
           UpdateListAssemblages();
       }
    }
    

    当我更改文本框值时,我也会更新列表

    private string texteFiltre;
    public string TexteFiltre
    {
       get { return texteFiltre; }
       set
       {
          texteFiltre = value;
          this.NotifyPropertyChanged("TexteFiltre");
          UpdateListAssemblages();
       }
    }
    

    如果我理解,这个 post 我需要找的是什么?我还不知道什么是iCollectionView,但我想我需要这样看?使用ICollectionView是否可以获得一些执行时间?如我所见,我需要更新它吗?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Alex.Wei    6 年前

    既然你没有给我们数据结构的细节,我只是假设 PhaseInContract 包含在 MainList . 因此,只需绑定就可以为您的 主要目录 ,然后将它们绑定到UI。所有视图将自动与源同步。

    Public ICollectionView MainListView;
    Public ICollectionView PhaseInContractView;
    Public ObservableCollection<YourDataClass> MainList;
    
    public YourViewModel()
    {
        MainList = new ObservableCollection<YourDataClass>();
    
        // Load datas form db and fill MainList
    
        MainListView = new CollectionViewSource() { Source = MainList }.View;
        MainListView.Filter = (x) =>
        {
            // your MainListView filtering logic.
        };
    
        PhaseInContractView = new CollectionViewSource() { Source = MainList }.View;
        PhaseInContractView.Filter = (x) =>
        {
            // your PhaseInContractView filtering logic
        };
    
    private Affaire selectedAffaire;
    public Affaire SelectedAffaire
    {
        get { return selectedAffaire; }
        set
        {
            selectedAffaire = value;
            this.NotifyPropertyChanged("SelectedAffaire");
            if (value != null)
            {
               PhaseInContractView.Refresh();
            }
            MainListView.Refresh();
        }
    }
    
    // And other properties.
    ...