我正在使用 MVVM-light 构建复合 WPF 应用程序。我有使用 MEF 将 ViewModel 注入其中的视图:
DataContext = App.Container.GetExportedValue<ViewModelBase>(
ViewModelTypes.ContactsPickerViewModel);
此外,我对每个视图(屏幕和用户控件)都有 ViewModel,其中构造函数通常如下所示:
private readonly ICouchDataModel _couchModel;
[ImportingConstructor]
public ContactsPickerControlViewModel(ICouchDataModel couchModel)
{
_couchModel = couchModel;
_couchModel.GetContactsListCompleted+=GetContactsListCompleted;
_couchModel.GetConcatcsListAsync("Andy");
}
目前,我有一些性能问题。一切都很缓慢。我有两种相关的问题
异步调用 DAL 方法(访问我的 couchdb)的正确方法是什么?等待/异步?任务?因为目前我必须围绕每个操作编写很多包装器(OnBegin,OnCompletion),所以我有 GetAsyncResult 方法可以用 ThreadPool.QueueUserWorkItem ,Action 等做一些疯狂的事情。我希望有更优雅的调用方式
目前,我的应用程序中有一些屏幕,在每个屏幕上,都有不同的自定义用户控件,其中一些需要来自 DB 的相同数据(或略有更改)。问题:在它们之间共享数据源的正确方法是什么?我主要是查看数据,而不是编辑。
示例:在屏幕 A 上:我有联系人下拉列表用户控件 (UC1) 和联系人详细信息用户控件 (UC2)。在每个用户控件中,他们的 ViewModel 都在调用 DAL:
_couchModel.GetConcatcsListAsync("Andy");
完成后,我将结果数据分配给一个属性:
List<ContactInfo> ContactsList = e.Resuls;
ContactsList 绑定到 UC1 中 DropDownListBox 的 ItemsSource。同样的故事也发生在 UC2 中。所以我最终得到了 2 次完全相同的 DB 调用。此外,如果我去有 UC1 的屏幕 B,当我将从屏幕 A 转到屏幕 B 时,我将再次调用 DB。
进行这些交互的正确方法是什么?例如获取数据并将其绑定到 UC。
谢谢你。