MyStatusBar
не должно быть UserControl
, но POCO:
public class MyStatusBar : INotifyPropertyChanged { ... }
Затем вы можете использовать ItemsControl
для привязки к ObservableCollection<MyStatusBar>
и определить ItemTemplate
в том месте, где вы помещаете UserControl
для рендеринга для каждого объекта 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
относятся к разным типам. Модель представления не должна создавать или открывать элементы пользовательского интерфейса. Он должен открывать объекты данных. Затем вы создаете элемент пользовательского интерфейса для каждого объекта данных, используя ItemTemplate
.