簡體   English   中英

為什么DataGrid中的AutoGeneratingColumn事件會重復這些列?

[英]Why does the AutoGeneratingColumn event in a DataGrid repeat the columns?

當我在列表中搜索時,將結果傳遞給函數以加載DataGrid,每次觸發AutoGeneratingColumn事件時,它將再次重復同一列。 啟動應用程序時,事件將檢查該列一次,第一次搜索將檢查兩次,第二次則進行三次,依此類推。 我有下一個函數來加載DataGrid:

private void cargarListaAgenda(List<listaAgendaClass> lista)
{
    Application.Current.Dispatcher.BeginInvoke(DispatcherPriority.Background, new Action(() =>
    {
        gridAgendaDataGridAgenda.AutoGeneratingColumn += (s, e) =>
        {
            e.Column.Visibility = Visibility.Hidden;

            if (e.Column.Header.ToString() == "Nombre" || e.Column.Header.ToString() == "Alias" || e.Column.Header.ToString() == "Apellidos")
            {
                e.Column.Visibility = Visibility.Visible;

                if (e.Column.Header.ToString() != "Apellidos")
                    e.Column.Width = new DataGridLength(gridAgendaDataGridAgenda.Width * 0.33);

                else
                    e.Column.Width = new DataGridLength(1, DataGridLengthUnitType.Star);
            }
        };

        gridAgendaDataGridAgenda.ItemsSource = null;
        gridAgendaDataGridAgenda.ItemsSource = lista;
    }));
}

似乎每次調用cargarListaAgenda方法時都在附加一個新的事件處理程序。

嘗試在附加新事件處理程序之前將其刪除:

private void cargarListaAgenda(List<listaAgendaClass> lista)
{
    Application.Current.Dispatcher.BeginInvoke(DispatcherPriority.Background, new Action(() =>
    {
        gridAgendaDataGridAgenda.AutoGeneratingColumn -= GridAgendaDataGridAgenda_AutoGeneratingColumn;
        gridAgendaDataGridAgenda.AutoGeneratingColumn += GridAgendaDataGridAgenda_AutoGeneratingColumn;

        gridAgendaDataGridAgenda.ItemsSource = lista;
    }));
}

private void GridAgendaDataGridAgenda_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
{
    e.Column.Visibility = Visibility.Hidden;

    if (e.Column.Header.ToString() == "Nombre" || e.Column.Header.ToString() == "Alias" || e.Column.Header.ToString() == "Apellidos")
    {
        e.Column.Visibility = Visibility.Visible;

        if (e.Column.Header.ToString() != "Apellidos")
            e.Column.Width = new DataGridLength(gridAgendaDataGridAgenda.Width * 0.33);

        else
            e.Column.Width = new DataGridLength(1, DataGridLengthUnitType.Star);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM