このコードを使用して、DataGridから列を追加または削除します。各列ヘッダー私はマウスの入力とイベントを残している。新しい列については、DataGridに挿入した後も同じイベントハンドラを追加したいと考えています。Datagrid Column Collection変更イベント
private void Columns_CollectionChanged(object sender, System.ComponentModel.CollectionChangeEventArgs e)
{
if (e.Action == CollectionChangeAction.Add)
{
int columnPosition = (this.Columns.Count - 1);
DataGridTextColumn column = new DataGridTextColumn();
column.Header = (e.Element as DataColumn).ColumnName;
column.Binding = new Binding(string.Format("[{0}]", column.Header.ToString()));
this.Columns.Insert(columnPosition, column);
DataGridColumnHeader columnHeader = DataGridHelper.GetColumnHeader(this, columnPosition);
if (columnHeader != null)
{
columnHeader.MouseEnter += new MouseEventHandler(ColumnHeader_MouseEnter);
columnHeader.MouseLeave += new MouseEventHandler(ColumnHeader_MouseLeave);
}
SetAutomappingOnOff = false;
}
else if (e.Action == CollectionChangeAction.Remove)
{
DataColumn column = e.Element as DataColumn;
DataGridColumn toRemove = (from DataGridColumn dc in this.Columns
where dc.Header != null && dc.Header.ToString() == column.ColumnName
select dc).First();
this.Columns.Remove(toRemove);
SetAutomappingOnOff = false;
}
}
<編集>
DataGridHelper
public static class DataGridHelper
{
public static DataGridColumnHeader GetColumnHeader(DataGrid dataGrid, int index)
{
DataGridColumnHeadersPresenter presenter = FindVisualChild<DataGridColumnHeadersPresenter>(dataGrid);
if (presenter != null) {
return (DataGridColumnHeader)presenter.ItemContainerGenerator.ContainerFromIndex(index);
}
return null;
}
}
< /編集>
しかし、列ヘッダは、常に私は、そのオブジェクトが作成され、追加され見ることができるにもかかわらず、nullを返します。データグリッド。
Pls help me。
おかげ ディー
どのようなデータグリッドヘルパーですか、どのようにして列見出しを取得しますか? –
パブリック静的クラスDataGridHelper {パブリック静的DataGridColumnHeader GetColumnHeader(データグリッドデータグリッド、INTインデックス) {DataGridColumnHeadersPresenterプレゼンタ= FindVisualChild(データグリッド)。 (発表者!= null) } return null; }} –