Почему datagrid заполняется не всегда?

Вот уже пару дней пытаюсь привести программу в чистый MVVM. Весь код привел в порядок быстро, но вот заполнить DataGrid (wpf) получается как-то криво. Для начала код: Модель

public class MyModel : BindableBase
{
    DataGrid dg = new DataGrid();
    public DataTable DataTableView
    {
        get
        {
            return dt;
        }
        set
        {
            dt = value;
            RaisePropertyChanged(nameof(DataTableView));
        }
    }
}

Модель представления

public class MyViewModel : BindableBase
{
     MyModel myModel = new MyModel();
     public MyViewModel()
    {
        myModel = App.myModel; \\ ссылка на модель, что б не юзать приставку App
        myModel.PropertyChanged += (s, e) => { RaisePropertyChanged(e.PropertyName); };
    }
 }
 public DataTable DT { get { return myModel.DataTableView;  } set {  myModel.DataTableView = value; RaisePropertyChanged(nameof(DT)); } }

В mainwindow

DataContext = App.myViewModel;

В XAML

<DataGrid x:Name="DataGrid_main" Margin="0,25,0,0" ItemsSource="{Binding DT, UpdateSourceTrigger=PropertyChanged}" AlternatingRowBackground="#FFE8E8E8" FontSize="14"/>

Так вот, таблица DataGrid не заполняется, хотя если дописать в свойстве в модели представления messagebox, то заполняется

public DataTable DT { get { MessageBox.Show(myModel.DataTableView.Rows.Count.ToString()); return myModel.DataTableView;  } set {  myModel.DataTableView = value; RaisePropertyChanged(nameof(DT)); } }

Я не понимаю, как это вообще влияет то... К слову в модели представления есть еще куча свойств и DelegateCommand (которые так же обращаются к myModel), все работают как положено


Ответы (2 шт):

Автор решения: Aziz Umarov

Мне кажется если у вас после MessageBox это всё работает, то проблема не хватает задержки и поток не успевает прорисовать greed. Попробуйте расинхронизировать или синхронизировать потоки поставьте async await.

→ Ссылка
Автор решения: Максим Росолов

Проблема в не правильном присвоении данных из datatable. Раньше: в Модели метод заполнял свойство DataTable, а свойство Модели Представления обращалась к свойству Модели, Теперь: В Модели больше нет свойства DataTable, теперь Модель методом возвращает заполненную DataTable в Метод в Модели Представления, где оно присваивается свойству

public async void GetTableData()
    {
        DataTable dt_temp = new DataTable();
        await Task.Run(() => dt_temp = myModel.GetTableData2()); // GetTableData2() - метод в модели, что возвращает заполненную DataTable
        DT = dt_temp; // DT - свойство DataTable
    }
→ Ссылка