0

DataGrid を使用した WPF フォームがあります。ボタンを使用して、ユーザーが手動で新しい列をデータグリッドに追加できます。これは、新しい列を追加するコードです。

        private void ColumnAdornerAddButton_MouseDown(object sender, MouseButtonEventArgs e)
    {
        DataGridTextAdornerColumn column = new DataGridTextAdornerColumn();
        column.Header = "New column";
        column.HeaderStyle = (Style)FindResource("columnHeader");
        column.AdornerTemplate = (DataTemplate)FindResource("columnAdorner");
        Binding binding = new Binding("Data");
        binding.Mode = BindingMode.TwoWay;
        column.Binding = binding;

        grid.Columns.Insert(grid.Columns.Count - 1, column);

        //Add adorner
        DataGridColumnHeader header = GetColumnHeaderFromColumn(column);
        AddAdorner(header, column.AdornerTemplate, column.IsReadOnly);
    }

    private DataGridColumnHeader GetColumnHeaderFromColumn(DataGridColumn column)
    {
        // dataGrid is the name of your DataGrid. In this case Name="dataGrid" 
        List<DataGridColumnHeader> columnHeaders = GetVisualChildCollection<DataGridColumnHeader>(grid);
        foreach (DataGridColumnHeader columnHeader in columnHeaders)
        {
            if (columnHeader.Column == column)
            {
                return columnHeader;
            }
        }
        return null;
    }

問題は、列をグリッドに追加した後、そのヘッダーがまだ生成されておらず、ビジュアル ツリーに存在しないことです。したがって、新しい列のヘッダーを取得して、それに装飾を適用することはできません。グリッドのビジュアル ツリーで ApplyTemplate を再帰的に呼び出そうとしましたが、うまくいきませんでした。

コードで新しい列の DataGridColumnHeader を生成するようにグリッドを強制する方法はありますか?

前もって感謝します。

4

2 に答える 2

2

こんにちは、datagridに列を追加した後、DataGridのメソッドUpdateLayOut()を呼び出します。

datagrid.UpdateLayout();

これがお役に立てば幸いです。

于 2012-07-18T16:47:36.340 に答える
0

ソリューションを強化したいだけです。この方法
datagrid.Items.Refresh(); は、ビュー (データグリッド) を再作成するのに役立ちます。したがって、データグリッドで更新された値を確認できます

于 2012-07-19T13:42:49.920 に答える