继承或封装View / Viewmodel

时间:2012-02-16 11:20:08

标签: c# wpf mvvm

我想将view / viewmodel封装到另一个view / viewmodel中。目的是有一个弹出窗口,幻灯片或任何你能想到的常见行为,并在其中插入自定义视图/视图模型。

我想使用通用做这件事,但我有点卡住了

父视图模型看起来像那样

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

    public T EnclosedViewModel { get; private set; }
}

父视图就像那样

... whatever design and behavior ...
<ContentPresenter Content="{Binding EnclosedViewModel}"/>
... whatever design and behavior ...

在我的映射文件中,我想说明一下,但问题出在此处:

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

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

这不起作用,因为viewmodel SidePanelViewModel的构造函数需要创建一个类型。

我想我想做的是让view / viewmodel继承自另一个视图/ viewmodel

希望有人可以提供帮助

2 个答案:

答案 0 :(得分:2)

为什么需要使用<T>

您不能只使用常规object或某种共享基础,例如IViewModelViewModelBase吗?

答案 1 :(得分:0)

在WPF中使用泛型类有时会非常痛苦。

我建议你创建一个基(抽象)类来实现(虚拟的,当然)方法的默认行为。