如何将自定义控件的 ObservableCollection 绑定到 StackPanel?
How to bind a ObservableCollection of custom controls to a StackPanel?
我有一个自定义控件对象的 ObservableCollection。
ObservableCollection<MyStatusBar> MyUIObjects = new ObservableCollection<MyStatusBar>();
自定义控件就是这样的用户控件
public partial class MyStatusBar : UserControl, INotifyPropertyChanged
将我的控件列表绑定到堆栈面板以便它们显示的最简单方法是什么。目前,当我绑定它们时,没有任何显示。当我手动将控件添加到 StackPanel.Children 集合时,它们会显示出来,但我想通过绑定来完成。
请查看代码片段。
将 Itemscontrol 替换为任何 itemscontrol',如列表框等等,否则你仍然可以使用 Itemscontrol
<ItemsControl ItemsSource="{Binding MyUIObjects}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
MyStatusBar
不应该是 UserControl
而应该是 POCO:
public class MyStatusBar : INotifyPropertyChanged { ... }
然后您可以使用 ItemsControl
绑定到 ObservableCollection<MyStatusBar>
并在放置 UserControl
的位置定义一个 ItemTemplate
以便为每个 POCO 对象呈现:
<ItemsControl ItemsSource="{Binding MyUIObjects}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<local:MyStatusBarUserControl />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
ItemsPanelTemplate
指定面板 - 在本例中为 StackPanel
- ItemsPresenter
为 ItemsControl
中的项目布局创建。
请注意,MyStatusBar
和 MyStatusBarUserControl
是不同的类型。视图模型不应创建或公开 UI 元素。它应该公开数据对象。然后,您将使用 ItemTemplate
.
每个数据对象创建一个 UI 元素
我有一个自定义控件对象的 ObservableCollection。
ObservableCollection<MyStatusBar> MyUIObjects = new ObservableCollection<MyStatusBar>();
自定义控件就是这样的用户控件
public partial class MyStatusBar : UserControl, INotifyPropertyChanged
将我的控件列表绑定到堆栈面板以便它们显示的最简单方法是什么。目前,当我绑定它们时,没有任何显示。当我手动将控件添加到 StackPanel.Children 集合时,它们会显示出来,但我想通过绑定来完成。
请查看代码片段。 将 Itemscontrol 替换为任何 itemscontrol',如列表框等等,否则你仍然可以使用 Itemscontrol
<ItemsControl ItemsSource="{Binding MyUIObjects}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
MyStatusBar
不应该是 UserControl
而应该是 POCO:
public class MyStatusBar : INotifyPropertyChanged { ... }
然后您可以使用 ItemsControl
绑定到 ObservableCollection<MyStatusBar>
并在放置 UserControl
的位置定义一个 ItemTemplate
以便为每个 POCO 对象呈现:
<ItemsControl ItemsSource="{Binding MyUIObjects}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<local:MyStatusBarUserControl />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
ItemsPanelTemplate
指定面板 - 在本例中为 StackPanel
- ItemsPresenter
为 ItemsControl
中的项目布局创建。
请注意,MyStatusBar
和 MyStatusBarUserControl
是不同的类型。视图模型不应创建或公开 UI 元素。它应该公开数据对象。然后,您将使用 ItemTemplate
.