Ошибка при попытке скрыть столбцы сразу после привязки данных к сетке данных - PullRequest
0 голосов
/ 18 мая 2018

Итак, у меня есть XML-файл, который я прочитал, а затем отобразил данные в DataGrid.После привязки DataView XML-файла к ItemsSource таблицы данных я пытаюсь скрыть 4-й столбец, который будет создан (это идентификатор, который я не хочу показывать), но получаю ошибку

System.Windows.Markup.XamlParseException
  HResult=0x80131501
  Message='The invocation of the constructor on type 'MoneyLog.MainWindow' that matches the specified binding constraints threw an exception.' Line number '6' and line position '9'.
  Source=PresentationFramework
  StackTrace:
   at System.Windows.Markup.WpfXamlLoader.Load(XamlReader xamlReader, IXamlObjectWriterFactory writerFactory, Boolean skipJournaledProperties, Object rootObject, XamlObjectWriterSettings settings, Uri baseUri)

Inner Exception 1:
ArgumentOutOfRangeException: Index was out of range. Must be non-negative and less than the size of the collection.

Код, который я использую:

DataGrid.Columns[4].Visibility = Visibility.Collapsed;

Из ошибки я вижу, что, очевидно, мой номер (4) был вне диапазона, поэтому я предполагаю, что таблица еще не была создана.Чтобы исправить это, я написал грубый хак, который задерживает кусок кода на полсекунды, и это решает проблему ...?

DataGrid.ItemsSource = dataView;
var timer = new DispatcherTimer { Interval = TimeSpan.FromMilliseconds(500) }; 
timer.Start();
timer.Tick += (sender, args) =>
{
     timer.Stop();
     DataGrid.Columns[3].Width = 250;
     DataGrid.Columns[4].Visibility = Visibility.Collapsed;
     DataGrid.CanUserAddRows = false;
     DataGrid.IsReadOnly = true;
};

Мой вопрос, есть ли другой способ сделать это без всего этого обходного пути таймера

...