我目前正在开发一个新的项目,它将成为一个数据记录可视化器(用于Pascal中的记录)。它应该提供一种方法来定义具有数据字段和指针字段的给定记录,然后会有一个示例视图,您可以在其中看到记录“在行动中”。
现在我遇到的问题是,在这个模型中有记录和组件,它们之间的关系是一个记录有多个组件(如上所述的数据和指针)。
我想为应用程序使用MVVM,但我现在不确定如何处理这个问题。我将记录和组件建模为RecordViewModel和ComponentViewModel(使用派生DataComponentVM,PointerComponentVM)。
现在提供这些虚拟机的外观,据我所知有两个选项:
UserControl方法适用于RecordViewModel但是当我尝试设计ComponentViewModel的方式时(在ContentPresenter中),这种方法失败,因为我需要在RecordViewModel中提供UserControls(而不是DataComponentViewModel)的集合会做出那样的工作(而且我很确定这不是一个好主意)。
Control方法还存在ViewModel不再是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; }
}
答案 0 :(得分:0)
我迷失了为什么你认为你需要提供一组用户控件,但听起来你真正想要的是RecordViewModel有一些变体:
ObservableCollection<ComponentViewModel> Components
然后,组件在xaml中绑定到某种ItemsControl的ItemsSource属性。 ComponentViewModel是否需要它自己的UserControl取决于你试图用它做什么。
如果没有开始为您点击,那么您可能需要发布一些代码,以便我们对其进行排序。
答案 1 :(得分:0)
我只考虑ControlTemplates(因此需要我的ViewModel从Control派生),当时还有DataTemplates,它的工作方式与我想要的完全相同。