web-dev-qa-db-ja.com

RowDefinitionまたはColumnDefinitionをバインディングを使用してグリッドに動的に追加するにはどうすればよいですか?

行と列の数が可変のテーブルを作成しようとしています。 ItemsControlGridとして持つItemsPanelでこれを行っています。そして、私はそのItemContainerStyleを介して各アイテムのGrid.RowGrid.Columnを設定できることを知っています。しかし、変更方法がわかりません行と列の数とそれらのサイズ名前でグリッドにアクセスできない場合。


質問:

実行時にRowDefinitionsColumnDefinitionsまたはGridを変更するにはどうすればよいですかコードビハインドなしでバインディングを使用しますか?


これはXAMLコードです。

<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を追加しようとしましたが、myGridItemsPanelTemplateにアクセスする方法が見つかりませんでした。 ] _。

プログラムで実行時にRowDefinitionsを追加または変更するする方法があるかどうか疑問に思っていますか?

13
Bizhan

GridおよびRowDefinitionsのプロパティが設定または変更されたときにそれらを変更するColumnDefinitionsには、 添付プロパティ を使用できます。

Gridを次のように書くことができます。

<Grid local:GridHelpers.RowCount="{Binding MaxGridRow}"
      local:GridHelpers.ColumnCount="3" />

次に、ViewModelコレクション内の最大の行番号を返すCellsからプロパティを公開します。

これらのプロパティの詳細な実装を見つけることができます 私のブログで

29
Rachel

コードビハインドからグリッドにアクセスできる場合は、次のようにすることができます。

var rowDefinition = new RowDefinition();
rowDefinition.Height = GridLength.Auto;
grid.RowDefinitions.Add(rowDefinition);
10
Y.Yanavichus