Событие после DataGrid новый DataContext - PullRequest
0 голосов
/ 26 апреля 2018

в моем окне WPF у меня есть DataGrid.
DataGrid загружает данные из DataTable вроде:

gridData.DataContext = dataTable

Все отлично работает, DataGrid заполняется данными из хранимой процедуры даннымиТаблица.Зависит от вида данных, столбцы DataGrid имеют разную ширину, и я хочу получить эту ширину ПОСЛЕ заполнения DataGrid данными.С каким событием я должен справиться?Я пытался DataContextChanged, Loaded, AutoGenratedColumns, SourceUpdated - но все они, кажется, вызываются до того, как DataGrid заполняется данными.

Есть решение?

Ответы [ 2 ]

0 голосов
/ 26 апреля 2018

Пуленепробиваемого способа не существует, так как DataGrid не вызывает событие "сгенерированные столбцы", но вы должны быть в состоянии вызвать Dispatcher.Invoke с DispatcherPriority ниже DispatcherPriority.Loaded после того, как DataGrid былзагружен, например:

dataGrid.AutoGenerateColumns = true;
dataGrid.ItemsSource = new List<Item> { new Item() { Name = "some very long name..." } };
dataGrid.Loaded += (s, e) => 
{
    dataGrid.Dispatcher.Invoke(new Action(() =>
    {
        MessageBox.Show(dataGrid.Columns[0].ActualWidth.ToString());
    }), System.Windows.Threading.DispatcherPriority.Input);
};
0 голосов
/ 26 апреля 2018

Вы можете использовать несколько подходов, чтобы поймать момент, когда DataSrid's ItemsSource изменяется:

  1. Использовать DependencyPropertyDescriptor:

        DependencyPropertyDescriptor itemsSourcePropertyDescriptor = DependencyPropertyDescriptor.FromProperty(ItemsControl.ItemsSourceProperty, typeof(DataGrid));
        itemsSourcePropertyDescriptor.AddValueChanged(dataGrid1, OnDataGridItemsSourceChanged);
    
    private void OnDataGridItemsSourceChanged(object sender, EventArgs e) {
    }
    
  2. Создание потомка DataGrid и переопределение метода OnItemsSourceChanged

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...