我想实现一个WPF控件,它支持绑定到实现特定接口的数据项集合,并支持模板,并根据接口中公开的属性排列这些项目。这通常是可接受的做法吗?哪种策略更好用?
谢谢!
答案 0 :(得分:0)
您提供的信息过于宽泛,因此我会尝试仅介绍基本信息。
是的,WPF确实支持对集合的绑定控件。您可以绑定到任何实现IEnumerable
的集合。这意味着您可以绑定到.NET中可用的大多数集合类型,包括List<T>
。
如果您想要活动绑定,即控件应在您从基础集合中添加或删除项目时自行更新,则您的集合必须实现更改通知。您可以实现INotifyPropertyChanged
或仅为此目的使用ObservableCollection<T>
。
在前端,如果您希望能够选择项目,可以使用ListBox
;如果不想,则可以使用ItemsControl
。
您必须针对基础数据类型创建DataTemplate
,并将其分配给ItemsControl.ItemTemplate
或ListBox.ItemTemplate
,以便您的项目在控件中进行适当的查看。
请注意,如果要动态更新项目属性并希望ItemsControl或ListBox相应地更新其项目,则您的数据类型必须在其自己的级别实现更改通知。您可以实现INotifyPropertyChanged
或从ObservableObject
派生您的课程(如果您正在使用MVVM Light)。
要更改项目在ItemsControl
中的排列方式,您可以将ItemsControl.ItemsPanel
设置为WPF中可用的其中一个面板,例如StackPanel
,WrapPanel
或{{ 1}}等等。
通常接受的做法是将项目划分为(至少)两层(或根据Visual Studio的项目);底层的 ViewModel ,用于处理业务逻辑和抽象的数据和操作存储。此ViewModel不知道,因此独立于UI。您可以在此处对类和集合实施更改通知,并公开您希望UI控件绑定到的公共属性。然后在ViewModel图层上创建一个 View 图层,该图层了解ViewModel图层(在View项目中添加ViewModel项目的引用),然后设置控件的Canvas
到ViewModel对象并将其属性绑定到ViewModel对象的公开属性。
在学习WPF时,你会发现并需要了解大量的绑定细节,但正如我所说,这是你应该采取的基本行动。