WPF MVVM Дилемма: ViewModel как производная от Control со стилем или как POCO с UserControl? - PullRequest
0 голосов
/ 05 июля 2010

В настоящее время я работаю над новым проектом, который будет визуализатором записи данных (для записей на Паскале). Он должен обеспечить способ определения данной записи с полями данных и полями указателя, а затем будет примерное представление, где вы можете увидеть запись «в действии».

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

Я хочу использовать MVVM для приложения, но сейчас я не уверен, как мне к этому подойти. Я смоделировал запись и компоненты в RecordViewModel и ComponentViewModel (с производными DataComponentVM, PointerComponentVM).

Теперь, чтобы узнать, как выглядят эти виртуальные машины, есть 2 варианта, насколько я знаю:

  • Получение ViewModels из Control и предоставление ControlTemplate
  • Создание UserControl с использованием ViewModel в качестве DataContext

Подход UserControl отлично работает для RecordViewModel, но когда я пытаюсь спроектировать способ отображения ComponentViewModels (в ContentPresenter), этот подход не срабатывает, потому что мне нужно было бы предоставить коллекцию UserControls (вместо DataComponentViewModels) в моем RecordViewModel, что сделает эту работу (и я уверен, что это не очень хорошая идея).

Подход Control также имеет проблему, заключающуюся в том, что ViewModels больше не POCO, что, на мой взгляд, вызывает у них странное чувство и также не считается хорошей практикой.

Есть ли другой способ решения проблемы? Есть ли у вас другие полезные советы для меня в этом отношении?

Заранее спасибо!

Код:

public class RecordViewModel : BaseViewModel
{
    public RecordViewModel()
    {
        Components = new ObservableCollection<ComponentViewModel>();
    }

    public ObservableCollection<ComponentViewModel> Components { get; set; }
}

public class DataComponentViewModel : ComponentViewModel
{
    public string Type { get; set; }
}

public class PointerComponentViewModel : ComponentViewModel
{
    public object Target { get; set; }
}

Ответы [ 2 ]

0 голосов
/ 07 июля 2010

О боже, почему я не подумал об этом раньше?

Я думал только о ControlTemplates (поэтому мне нужны мои ViewModels для получения из Control), когда есть также DataTemplates, которые работают точно так, как я хотел.

0 голосов
/ 05 июля 2010

Я заблудился из-за того, что вы думаете, что вам нужно предоставить набор пользовательских элементов управления, но похоже, что вы действительно хотите, чтобы RecordViewModel имел некоторые вариации:затем привязанный в xaml к свойству ItemsSource некоторого вида ItemsControl.Нужен ли ComponentViewModel свой собственный UserControl, зависит от того, что вы пытаетесь с ним сделать.

Если вам это не нравится, вы можете опубликовать некоторый код, чтобы мы могли разобраться.

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