Учитывая, что у меня есть следующий виджет (и к нему прикреплен вид):
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, чтобы помочь с привязками.