MVVM-light を使用して複合 WPF アプリケーションを構築しています。MEF を使用してビューモデルが注入されたビューがあります。
DataContext = App.Container.GetExportedValue<ViewModelBase>(
ViewModelTypes.ContactsPickerViewModel);
さらに、ビュー (スクリーンとユーザー コントロール) ごとにビューモデルを用意しています。コンストラクターは通常、次のようになります。
private readonly ICouchDataModel _couchModel;
[ImportingConstructor]
public ContactsPickerControlViewModel(ICouchDataModel couchModel)
{
_couchModel = couchModel;
_couchModel.GetContactsListCompleted+=GetContactsListCompleted;
_couchModel.GetConcatcsListAsync("Andy");
}
現在、いくつかのパフォーマンスの問題があります。すべてがただ遅いです。2種類の関連する質問があります
DALメソッドを非同期的に呼び出す(私のcouchdbにアクセスする)正しい方法は何ですか? 待機/非同期? タスク?現在、各操作の周りに多くのラッパー(OnBegin、OnCompletion)を作成する必要があるため、 ThreadPool.QueueUserWorkItem 、 Action などでクレイジーなことを行う GetAsyncResult メソッドがあります。よりエレガントな呼び出し方法があることを願っています
現在、アプリケーションにいくつかの画面があり、各画面にはさまざまなカスタム UserControls があり、そのうちのいくつかは DB から同じデータ (またはわずかに変更) が必要です。質問:それらの間でデータソースを共有する正しい方法は何ですか? 編集ではなく、主にデータを表示しています。
例: 画面 A: 連絡先ドロップダウン リスト ユーザー コントロール (UC1) と連絡先詳細ユーザー コントロール (UC2) があります。各ユーザー コントロールでは、ViewModel が DAL を呼び出しています。
_couchModel.GetConcatcsListAsync("アンディ");
完了したら、結果データをプロパティに割り当てます。
List<ContactInfo> ContactsList = e.Resuls;
ContactsList は、UC1 の DropDownListBox の ItemsSource にバインドされます。同じ話が UC2 でも起こります。したがって、DBへのまったく同じ呼び出しが2回行われます。また、UC1 がある画面 B に移動すると、画面 A から画面 B に移動するときに、DB に別の呼び出しを行います。
これらの相互作用を行う正しい方法は何ですか? たとえば、データを取得して UC にバインドします。
ありがとうございました。