【问题标题】:Updating a single ObservableCollection but show in 2 different ListViews更新单个 ObservableCollection 但显示在 2 个不同的 ListViews
【发布时间】:2020-05-28 18:11:33
【问题描述】:

假设我有一个 ObservableCollection 可以插入、更新和删除。

public ObservableCollection<Item> AllItems {get;set;} 

Item 类(实现 INotifyPropertyChanged)如下所示:

public class Item
{
  public int Id {get;set;}
  public int Kind {get;set;}
  public string Text {get;set;}
}

我在一个 ListView 中的视图中有这个绑定。一切正常,这意味着如果我从 ViewModel 中删除、添加或更新 ObservableCollection 中的项目,它们会按预期在我的 ListView 中更新。

但现在我需要在我的视图中将 ListView 拆分为 2 个 ListView。第一个 ListView 必须显示 Item.Kind=1 的所有项目。另一个 ListView 必须包含 Item.Kind=2 的所有项目。

我不介意从我的 ViewModel 绑定到两个不同的 ObservableCollections,但我真的很想要一个我可以做的解决方案:

var item = new Item { Id=22, Kind=1, Text="SomeText" };
AllItems.Add(item);
AllItems.First(x => x.Id==22).Text = "SomeOtherText";
AllItems.Remove(item);

然后这些操作会自动反映在2个ListView中。所以在上面的例子中,新的 Item 只是从第一个 ListView 中查看、更新和删除(其中 Item.Kind=1)。

这可能吗?

编辑:我应该说我尝试使用两个具有相同 ObservableCollection 作为源的 CollectionViewSource。但这失败了,似乎不是正确的解决方案。

【问题讨论】:

    标签: c# wpf


    【解决方案1】:

    使用不同的过滤器创建两个 ListCollectionViews - 每个 ListView 一个

    public ICollectionView Items_1 { get; private set; }
    public ICollectionView Items_2 { get; private set; }
    
    public ViewModel
    {
        Items_1 = new ListCollectionView(AllItems);
        Items_1.Filter = o => (o as Item).Kind == 1;
    
        Items_2 = new ListCollectionView(AllItems);
        Items_2.Filter = o => (o as Item).Kind == 2;
    }
    

    【讨论】:

      猜你喜欢
      • 2012-06-25
      • 2011-07-02
      • 1970-01-01
      • 1970-01-01
      • 2018-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-24
      相关资源
      最近更新 更多