簡體   English   中英

繼承或封裝View / Viewmodel

[英]inherit or encapsulate 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的構造函數需要創建一個類型。

我想我想做的是讓一個視圖/視圖模型從另一個視圖/視圖模型繼承

希望有人能幫上忙

為什么需要使用<T>

您不能只使用常規object或某種共享庫(例如IViewModelViewModelBase嗎?

在WPF中使用泛型類有時可能會很痛苦。

我建議您創建一個基類(抽象類),該類為您的(當然是虛擬的)方法實現默認行為。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM