ObservableCollection和ICollectionView

时间:2017-01-27 21:07:59

标签: wpf xaml

我在单独的用户控件中提取了GridView,没有自己的视图模型或代码隐藏。此用户控件用于两个不同的视图,默认情况下会将自己的数据上下文传递给视图。

将其视为以下内容:

用户控制

<DataGrid ItemsSource="{Binding Cars}" ... />

查看1

<LocalViews:CarsGrid />

查看1&#39的模型

...
public ObservableCollection<Cars> Cars { get; }
...

查看2

<LocalViews:CarsGrid />

查看2&#39的模型

...
public ICollectionView Cars { get; }
...

即。两种视图模型之间的区别在于它们提供了在不同类型下绑定到数据网格的集合。

我想在两个视图模型之间提取一个通用接口,因为我不觉得对(间接)视图模型没有任何要求可以绑定到这个视图模型的用户控件。< / p>

问题是 - 我找不到ObservableCollectionICollectionView之间的公共基类或接口。我的做法错了吗?

2 个答案:

答案 0 :(得分:-1)

  

问题是 - 我在ObservableCollection和ICollectionView之间找不到公共基类或接口。

IEnumerable怎么样?

答案 1 :(得分:-1)

因为ObservableCollection是一个集合,而ICollectionView是一个集合视图的接口,所以它们不共享一个公共接口。

您应该使用ObservableCollection实现的其中一个接口。

public ObservableCollection<Cars> Cars { get; }
public ICollection<Cars> Cars { get; } //this is implemented by observablecollection

你可能想尝试这样的事情

VM1

private ObservableCollection<T> _cars; 
public IEnumerable Cars { get { return _cars; } }

VM2

private List<T> _cars;
public IEnumerable Cars { get { return _cars; } }

因此两个VM都暴露了相同的属性。