如何基于绑定列表构建包含其他控件的WPF控件

时间:2017-01-31 09:10:35

标签: c# wpf mvvm

我有一个看起来像

的ViewModel
public class MyViewModel
{
    public ObservableCollection<UserDefinedFieldBase> CustomFields { get; }
}
public class UserDefinedFieldBase
{
    public Point CustomLocation { ... }
}
public class CustomTextField : UserDefinedFieldBase
{
    public string Text { ... }
}

因此,每种可能类型的字段都有自己的类型,并包含一个位置(可由用户自定义,因此它是viewModel的一部分,而不是视图。

问题部分: 实施控制的最佳方法是什么?我想过

  • 使用ObservableCollection&lt; UserDefinedFieldBase&gt;类型的DependencyProperty创建UserControl;并使用一些适当的容器和一个TemplateSelector用于派生类
  • 工作/实现ItemsControl和ItemsSource,而无需通过自定义DependencyProperty

1 个答案:

答案 0 :(得分:1)

这取决于控件的用途是什么,应该如何工作以及UI应该是什么样子。

如果要在视图中显示多个UserDefinedFieldBase对象,则应使用绑定到视图模型的CustomFields属性的ItemsControl。您仍然可以将ItemsControl添加到具有其他几个依赖项属性的UserControl中。

如果您只想显示UserDefinedFieldBase列表,则可能根本不需要UserControl。您可以使用ItemsControl并使用ItemTemplate定义每个项目的外观。

因此,您应该使用ItemsControl,但是根据您提供的信息,是否需要创建UserControl有点不清楚。如果你想显示的东西不仅仅是带有项目列表的ItemsControl,你可以将ItemsControl包装在UserControl中,并根据需要添加其他几个元素。