наследовать или инкапсулировать View / Viewmodel - PullRequest
0 голосов
/ 16 февраля 2012

Я хочу инкапсулировать 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 требует создания типа.

Я думаю, что я хочу сделать, это иметь представление /viewmodel наследовать от другого view / viewmodel

Надеюсь, кто-то может помочь в этом

Ответы [ 2 ]

2 голосов
/ 16 февраля 2012

Зачем вам нужно использовать <T>?

Разве вы не можете просто использовать обычную object или какую-то общую базу, такую ​​как IViewModel или ViewModelBase?

0 голосов
/ 16 февраля 2012

Работа с общими классами в WPF иногда бывает довольно болезненной ..

Я бы порекомендовал вам создать базовый (абстрактный) класс, который реализует поведение по умолчанию для ваших (виртуальных, конечно) методов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...