Как динамически добавить RowDefinition или ColumnDefinition в Grid с привязкой?
Вопрос:
Как вы можете изменить RowDefinitions
или же ColumnDefinitions
из Grid
во время выполнения с использованием только XAML и связывания без кода позади?
у меня есть ItemsControl
который показывает свои элементы в Grid
, этот Grid
имеет динамический RowDefinitions
как это:
<ItemsControl Name="myItemsControl" ItemsSource="{Binding Cells}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Grid Name="myGrid">
<Grid.RowDefinitions>
<!-- unknown number of rows are added here in run-time -->
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<!-- known number of columns are added here in run-time -->
</Grid.ColumnDefinitions>
</Grid>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemContainerStyle>
<Style.../>
</ItemsControl.ItemContainerStyle>
</ItemsControl>
Я пытался добавить немного RowDefinition
в коде позади, но я не мог найти способ получить доступ к myGrid
так как это внутри ItemsPanelTemplate
,
Мне интересно, есть ли способ программно добавить или изменить RowDefinitions
во время выполнения?
2 ответа
Вы можете использовать прикрепленные свойства для Grid
которые изменяют RowDefinitions
а также ColumnDefinitions
когда эти свойства установлены или изменены.
Это позволит вам написать свой Grid
как это:
<Grid local:GridHelpers.RowCount="{Binding MaxGridRow}"
local:GridHelpers.ColumnCount="3" />
Затем просто выставить недвижимость из вашего ViewModel
который возвращает самый большой номер строки в Cells
коллекция.
Вы можете найти подробную реализацию этих свойств в моем блоге.
Если бы у вас был доступ к сетке из-за кода, вы могли бы сделать это:
var rowDefinition = new RowDefinition();
rowDefinition.Height = GridLength.Auto;
grid.RowDefinitions.Add(rowDefinition);