Учитывая, что у меня есть следующий виджет (и прикрепленное к нему представление):
public class MyWidgetViewModel : Screen {}
Я могу легко использовать и отображать его в другом представлении. Модель представления, в которой размещается виджет, выглядит следующим образом:
public class WidgetWorkspaceViewModel : Screen
{
private Screen myWidget = new MyWidgetViewModel();
public Screen MyWidget
{
get { return myWidget; }
set { myWidget = value; }
}
}
И элемент управления отображается в WidgetWorkspaceView следующим образом:
<ContentControl x:Name="OneWidget"/>
Все это прекрасно работает. Но теперь я хотел бы изменить его так, чтобы WidgetWorkspaceViewModel содержал коллекцию виджетов, а WidgetWorkspaceView должен отображать их один за другим. И у меня есть некоторые проблемы с тем, чтобы заставить это работать.
Модель представления должна выглядеть так:
private List<Screen> widgets;
public List<Screen> Widgets
{
get { return widgets; }
set { widgets = value; NotifyOfPropertyChange(() => Widgets); }
}
Эта часть кода в порядке, потому что я связал виджеты с полем со списком, и поле со списком правильно отображает список элементов управления. Но у меня проблемы с размещением виджетов в представлении. Это XAML, который я пытался использовать в WidgetWorkspaceView, но безуспешно:
<ListBox x:Name="Widgets">
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<toolkit:WrapPanel />
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
<ListBox.ItemTemplate>
<DataTemplate>
<ContentControl Width="100" Height="100" DataContext="{Binding}"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
Основываясь на контрольных точках, часть привязки данных работает нормально, но я не рисую виджеты.
Есть идеи, как это решить? Я использую Caliburn.Micro, чтобы помочь с привязками.