В настоящее время я работаю над новым проектом, который будет визуализатором записи данных (для записей на Паскале). Он должен обеспечить способ определения данной записи с полями данных и полями указателя, а затем будет примерное представление, где вы можете увидеть запись «в действии».
Теперь проблема, с которой я столкнулся, состоит в том, что в этой модели есть записи и компоненты, и связь между ними заключается в том, что одна запись имеет несколько компонентов (данные и указатель, как упомянуто выше).
Я хочу использовать 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; }
}