Ответ 1
Это, к сожалению, нормальное поведение. Это связано с тем, как осуществляется управление. В WPF у вас есть слои на уровнях элементов управления, и DataGrid не имеет способа узнать, какие элементы управления пока не завершили рендеринг.
Итак, первый проход макета создает элементы управления, но затем он должен пройти второй проход, чтобы определить, насколько велики эти элементы управления. Как только он знает, насколько велики элементы управления, он может начать изменять размеры столбцов.
DataGrid - отличный пример сценария, в котором высоко настраиваемая и динамическая система компоновки WPF не работает. Чтобы получить такую производительность, к которой вы привыкли, вам нужно перейти с сетью, отличной от WPF, которая может лучше прогнозировать собственную иерархию и таким образом выполнять такие измерения без необходимости предварительного рендеринга всего. Такие элементы управления существуют для WPF, но вы должны их найти.
Здесь один из xceed: http://xceed.com/Grid_WPF_Intro.html?gclid=CNKE8rOBtrICFQfonAodHQ8AEA
Здесь один из Telerik: http://www.telerik.com/products/wpf/gridview.aspx
(Из-за необходимости балансировать гибкость с производительностью и большое количество функций, ожидаемых в современном datagrid, этот контроль уже давно считается вершиной развития управления. Хорошие датаарифы чрезвычайно сложны в построении. В Excel, Microsoft построила целое приложение вокруг, по сути, прославленного datagrid. Все это говорит о том, что вы, вероятно, не найдете то, что ищете, бесплатно.)
Смотрите этот вопрос: WPF DataGrid Vs Windows Forms DataGridView