继承或封装View/Viewmodel

本文关键字:Viewmodel View 封装 继承 | 更新日期: 2023-09-27 18:24:54

我想将一个视图/视图模型封装到另一个视图或视图模型中。目的是有一个弹出窗口,滑动面板或任何你能想到的常见行为,并插入一个自定义的视图/视图模型。

我想用泛型来做这件事,但我有点被卡住了

父视图模型将看起来像

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>

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

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

希望有人能在上提供帮助

继承或封装View/Viewmodel

为什么需要使用<T>

你不能只使用一个普通的object或某种共享库,如IViewModelViewModelBase吗?

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

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