Мне нужно получить данные из базы данных, чтобы получить необходимые элементы для некоторых комбинированных списков. У меня есть асинхронный метод, который получает все данные, и он вызывается от construtor. Код такой.
private async Task getDataASync()
{
Task<List<Typ01>> miTsk01 = VariablesGlobales.getData01Async();
Task<List<Type02>> miTsk02 = VariablesGlobales.getData02Async();
Task<List<Type03>> miTskT03 = VariablesGlobales.getData03Async();
Task<List<Type04>> miTsk04 = VariablesGlobales.getData04Async();
await Task.WhenAll(miTsk01,
miTsk02,
miTsk03,
miTsk04).ConfigureAwait(false);
GlobalVariables.vgData01.AddRange(miTsk01.Result);
GlobalVariables.vgData02.AddRange(miTsk02.Result);
GlobalVariables.vgData03.AddRange(miTsk03.Result);
GlobalVariables.vgData04.AddRange(miTsk04.Result);
}
public MyViewModel()
{
getDataASync();
}
XAML
<ComboBox
SelectedItem="{Binding MySelectedItem01}"
ItemsSource="{x:Static vg:VariablesGlobales.vgData01}">
</ComboBox>
<ComboBox
SelectedItem="{Binding MySelectedItem02}"
ItemsSource="{x:Static vg:VariablesGlobales.vgData02}">
</ComboBox>
<ComboBox
SelectedItem="{Binding MySelectedItem03}"
ItemsSource="{x:Static vg:VariablesGlobales.vgData03}">
</ComboBox>
<ComboBox
SelectedItem="{Binding MySelectedItem04}"
ItemsSource="{x:Static vg:VariablesGlobales.vgData04}">
</ComboBox>
Проблема в том, что я получаю сообщение об ошибке, в котором говорится, что collectionView не может быть изменен другим подпроцессом, отличным от Dispatcher.
Я попытался создать свойство в моей модели представления, которое получает данные из глобальной переменной, и представление связывает это свойство, и затем оно работает.
Действительно, я не очень хорошо понимаю проблему, потому что в методе, который получает данные из базы данных, он ждет, пока я получу все данные, а затем я обновлю глобальные коллекции. Я думал, что я в той же теме, что и основное приложение, но, похоже, я ошибаюсь.
Как я могу обновить глобальные коллекции, чтобы их можно было связать с представлением?
Спасибо.