Как динамически добавить 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);
Другие вопросы по тегам