У меня тут небольшая проблема с дизайном.
У меня есть вид:
<ItemsControl x:Name="CellVMs">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Grid />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemContainerStyle>
<Style>
<Setter Property="Grid.Row"
Value="{Binding Position.Y}" />
<Setter Property="Grid.Column"
Value="{Binding Position.X}" />
</Style>
</ItemsControl.ItemContainerStyle>
</ItemsControl>
, который связан с коллекцией моделей представления, у которых есть свойство position, которое стиль использует для позиционирования его на ItemPanelTemplate. (Только одна view-модель на ячейку, и ячейки сетки имеют фиксированный размер)
1) Я бы хотел, чтобы эта сетка была псевдо-бесконечной, то есть по мере добавления и вычитания EditorVM сетка должна динамически добавлять и удалять определения строк / столбцов, и всегда должно быть достаточно сетки, и всегда должно быть достаточно заполнить родительский вид.
2) В моей содержащей модели представления я импортирую экземпляр реализации IGridEditor, который имеет свойство Grid. Как я могу привязать ItemsPanelTemplateGrid к IEditor.Grid?
Прямо сейчас я добавляю CellVM в коллекцию в методах IGridEditor, затем, когда содержащий vm импортирует экземпляр, устанавливает коллекцию CellVM содержащего vm в коллекцию экземпляров, а элемент управления привязывается к ней с использованием соглашений Caliburn.Micro. .
Я использую Caliburn.Micro \ MEF, кстати.
Может кто-нибудь помочь мне разобраться?
Edit:
Я пытался понять это, но я иду пустым.
Единственное, что я могу найти, это
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Grid x:Name="EditorGrid"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
и в моем viemodel:
[Import("EditorGrid", typeof(Grid))]
public Grid EditorGrid { get; set; }
и соответствующий объект Export в классе, который имеет методы для добавления объектов в сетку /