2017-01-27 3 views
0

個別のユーザーコントロールで個別のビューモデルまたはコードビハインドを持たずにGridViewを抽出しました。このユーザーコントロールは2つの異なるビューで使用され、デフォルトでは独自のデータコンテキストをビューに渡します。ObservableCollectionとICollectionViewの間の共通インターフェイス

ユーザーコントロール

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

ビュー1

<LocalViews:CarsGrid /> 

ビュー1のモデル

... 
public ObservableCollection<Cars> Cars { get; } 
... 
次のようにそれの

考えます

ビュー2

<LocalViews:CarsGrid /> 

ビュー2のモデル

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

2つのビューモデルの間、すなわち違いは、さまざまな種類の下でデータグリッドにバインドされたコレクションを提供していることです。

このビューモデルレスのユーザーコントロールにバインドできる(間接的な)ビューモデルに対する要件がないと気にしないので、2つのビューモデル間で共通のインターフェイスを抽出したいと考えました。

問題は - ObservableCollectionICollectionViewの間に共通の基本クラスまたはインターフェイスが見つかりませんでした。私のアプローチは間違っていますか?

答えて

-1

問題は次のとおりです。ObservableCollectionとICollectionViewの間に共通の基本クラスまたはインターフェイスが見つかりませんでした。

IEnumerable

+0

ObservableCollectionによって実装されていません。それはそれのジェネリック版を実装しています - 'IEnumerable '。 ICollectionViewは非常に奇妙な階層を持っています... –

+0

ObservableColletion は確かにジェネリックでないIEnumerableインターフェイスも実装しています。これはうまくコンパイルされます:System.Collections.IEnumerable collecton = new ObservableCollection ();あなた自身のためにそれを試してみてください:) – mm8

+0

IEnumerableはあなたがここで探している(唯一の)共通のインターフェイスでなければなりません。 – mm8

-1

ObservableCollectionはコレクションであり、ICollectionViewはコレクションビューのインターフェイスであるため、共通のインターフェイスを共有しないためです。

ObservableCollectionが実装するインターフェイスの1つを代わりに使用する必要があります。

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

あなたはので、両方のVMが同じプロパティを公開し、この

VM1

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

VM2

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

のようなものを試してみたいことがあります。

関連する問題