Доброй ночи. Подскажите, пожалуйста, как корректно реализовать следующий функционал в WPF приложении:
Имеется View с DataGrid. Данные для DataGrid берутся из ObservableCollection. Хочется чтобы ObservableCollection наполнялся из БД асинхронным методом. На данный момент написано следующее, но, естественно, не работает. Подскажите где косяк, пожалуйста:
View:
...
<dxg:GridControl ShowLoadingPanel="{Binding MerchantsLoading}" ItemsSource="{Binding Merchants}".../>
...
ViewModel:
public MerchantViewModel {
MerchantsLoading = true;
Merchants = SQLite.GetMerchants().Result;
SQLite.GetMerchants().ContinueWith(task => MerchantsLoading = false);
}
GetMerchants:
public static async Task<ObservableCollectionCore<Merchant.Merchant>> GetMerchants()
{
SQLiteConnection SqlConnection = new SQLiteConnection(MerchantDB);
var Merchants = new ObservableCollectionCore<Merchant.Merchant>();
try
{
SqlConnection.Open();
SQLiteCommand myCommand = new SQLiteCommand("select * from merchant", SqlConnection);
DbDataReader myReader = await myCommand.ExecuteReaderAsync();
while (myReader.Read())
{
Merchants.Add(new Merchant.Merchant
{
ID = Convert.ToInt32(myReader["ID"]),
Name = Convert.ToString(myReader["Name"])
});
}
}
catch (Exception ex)
{
Messenger.Default.Send(new LogMessage { Message = "Ошибка в процедуре GetMerchants" });
Messenger.Default.Send(new LogMessage { Message = ex.ToString() });
}
finally
{
SqlConnection.Close();
}
return Merchants;
}