2012-02-16 6 views
0

view/viewmodelを別のビュー/ viewmodelにカプセル化したい。目的は、ポップアップ、スライドパネル、または一般的な動作を考えることができ、それにカスタムビュー/ビューモデルを挿入することです。View/Viewmodelを継承またはカプセル化する

私はそれを行うための汎用を使用したいが、私は一種の

をこだわって、親ビューモデルは、親ビューは、その

... whatever design and behavior ... 
<ContentPresenter Content="{Binding EnclosedViewModel}"/> 
... whatever design and behavior ... 
ようになること

public class SidePanelViewModel<T> 
{ 
    public SidePanelViewModel(T enclosedViewModel) 
    { 
     EnclosedViewModel = enclosedViewModel; 
    } 

    public T EnclosedViewModel { get; private set; } 
} 

のようになります。

私のマッピングファイルでは、それを置いておきたいが、ここに問題がある:

<DataTemplate DataType="{x:Type WPFTests:SidePanelViewModel}"> 
    <WPFTests:SidePanelView /> 
</DataTemplate> 

<DataTemplate DataType="{x:Type WPFTests:EnclosedViewModel}"> 
    <WPFTests:EnclosedView /> 
</DataTemplate> 

ビューモデルSidePanelViewModelのコンストラクターが作成するタイプを再作成するため、これは機能しません。私は私が何をしたいのかを推測

がビューを持っている/他のビュー/のviewmodelから

を継承ViewModelに誰かがWPFでのジェネリッククラスを操作すること

+1

なぜ「」を使用する必要がありますか?通常の 'オブジェクト'や 'IViewModel'や' ViewModelBase'のような共有ベースを使うことはできませんか? – Rachel

+0

@レイチェル私はそれを恋しく思うことができない!あまりにも多くの派手な技術は私に少しばかげてしまったと思う...私が良い答えとしてそれを検証したい場合は、それに答える。 – Guillaume

+0

投稿者回答: – Rachel

答えて

2

なぜ<T>を使用する必要がありますか?

普通のobjectや、IViewModelViewModelBaseなどの共有ベースを使用できませんか?

0

に役立つことを願って、時には非常に痛みを伴うことができます。..

あなたの(もちろん仮想の)メソッドのデフォルトの動作を実装するベース(抽象)クラスを作成することをお勧めします。

+0

私はそれを知っています、私は最初のことを念頭に置いていましたが、私も同様の見解を継承する必要があり、それを行う方法がわかりません – Guillaume

+0

しかしViewModel/View responsibility異なっています。実際、ViewModelはバインディングを更新するだけです。ビューメソッドは呼び出されません。 ビューに共通の動作が必要な場合は、ビューに別のクラスを実装してください –

+0

私は十分明確ではありませんでした。ビューモデルの動作だけでなく、親ビューの外観にもしたいです。子ビュー/ viemodelは親ビュー/ビューモデルに座り、それによって装飾されます。親ビューではい​​くつかのボーダー画像ボタンがあります...子ビューで毎回書き直したくありません。 – Guillaume

関連する問題