WPF控件绑定到集合

时间:2017-11-02 07:14:47

标签: wpf wpf-controls

我想实现一个WPF控件,它支持绑定到实现特定接口的数据项集合,并支持模板,并根据接口中公开的属性排列这些项目。这通常是可接受的做法吗?哪种策略更好用?

谢谢!

1 个答案:

答案 0 :(得分:0)

您提供的信息过于宽泛,因此我会尝试仅介绍基本信息。

是的,WPF确实支持对集合的绑定控件。您可以绑定到任何实现IEnumerable的集合。这意味着您可以绑定到.NET中可用的大多数集合类型,包括List<T>

如果您想要活动绑定,即控件应在您从基础集合中添加或删除项目时自行更新,则您的集合必须实现更改通知。您可以实现INotifyPropertyChanged或仅为此目的使用ObservableCollection<T>

在前端,如果您希望能够选择项目,可以使用ListBox;如果不想,则可以使用ItemsControl

您必须针对基础数据类型创建DataTemplate,并将其分配给ItemsControl.ItemTemplateListBox.ItemTemplate,以便您的项目在控件中进行适当的查看。

请注意,如果要动态更新项目属性并希望ItemsControl或ListBox相应地更新其项目,则您的数据类型必须在其自己的级别实现更改通知。您可以实现INotifyPropertyChanged或从ObservableObject派生您的课程(如果您正在使用MVVM Light)。

要更改项目在ItemsControl中的排列方式,您可以将ItemsControl.ItemsPanel设置为WPF中可用的其中一个面板,例如StackPanelWrapPanel或{{ 1}}等等。

通常接受的做法是将项目划分为(至少)两层(或根据Visual Studio的项目);底层的 ViewModel ,用于处理业务逻辑和抽象的数据和操作存储。此ViewModel不知道,因此独立于UI。您可以在此处对类和集合实施更改通知,并公开您希望UI控件绑定到的公共属性。然后在ViewModel图层上创建一个 View 图层,该图层了解ViewModel图层(在View项目中添加ViewModel项目的引用),然后设置控件的Canvas到ViewModel对象并将其属性绑定到ViewModel对象的公开属性。

在学习WPF时,你会发现并需要了解大量的绑定细节,但正如我所说,这是你应该采取的基本行动。