私はMVVM Light WPFアプリケーションをビルドするためにVisual Studio 2015とEntity Framework 6を使用しています。ユーザーが検索ボタンをクリックすると、それはビューモデルのコンストラクタで、次のように定義されているRelayCommand
を呼び出します。ObservableCollectionを返す非同期検索を実行する
SearchEmployeesRelayCommand = new RelayCommand(SearchEmployees);
ビューモデルでSearchEmployees
方法は、次のようになります。
private BackgroundWorker _worker;
public void SearchEmployees()
{
_worker = new BackgroundWorker(); // use this to show busy indicator
var dataService = new EmployeeDataService();
_worker.DoWork += (o, ea) =>
{
SearchResults = dataService.SearchEmployees(SelectedColumn, SearchValue);
};
_worker.RunWorkerCompleted += (o, ea) =>
{
IsSearching = false;
};
IsSearching = true;
_worker.RunWorkerAsync();
}
データサービスの検索方法は、次のようになります。
public ObservableCollection<EmployeeViewModel>
SearchEmployees(string selectedColumn, string searchValue)
{
var paramEmployee = Expression.Parameter(typeof(Employee), "e");
var comparison = Expression.Lambda<Func<Employee, bool>>(
Expression.Equal(
Expression.Property(paramEmployee, selectedColumn),
Expression.Constant(searchValue)),
paramEmployee).Compile();
using (var context = new MyEntities())
{
var query = (from e in context.Employees
.Where(comparison)
select new EmployeeViewModel
{
// Various EF model properties...
});
return new ObservableCollection<EmployeeViewModel>(query);
}
}
私は上記の方法を作るしようとした場合async
とawaitable
、このようなもので:
return await new ObservableCollection<EmployeeViewModel>(query);
それは、このエラーを与える:
'ObservableCollection' does not contain a definition for 'GetAwaiter' and no extension method 'GetAwaiter' accepting a first argument of type 'ObservableCollection' could be found (are you missing a using directive or an assembly reference?)
それはObservableCollection
を返していた場合にどのように検索async
を作るのですか?ありがとう。
更新:
_worker.DoWork += async (o, ea) =>
{
SearchResults = await dataService
.SearchEmployees(selectedColumnValue, SearchValue);
IsSearching = false;
};
そして、私は完全に_worker.RunWorkerCompleted
ブロックを削除:動作するようにビジーインジケータのために、私はこの変更をしなければなりませんでした。おそらくそれを行うためのより良い方法がありますが、これは私がそれを働かせる方法でした。
あなたはこれをお読みくださいhttps://msdn.microsoft.com/en-us/library/hh191443.aspx – Will