我有一个使用MVVM Light Toolkit的SL4应用程序。在视图模型中,我调用一个数据服务,该服务从OData服务中检索数据。在VM中,我使用DispatcherHelper工具类( MVVM Light的一部分)从传递给数据服务的回调中更新VM上属性。例如,我的视图模型方法如下:
public string CurrentUserLogin {
get {
if (string.IsNullOrEmpty(_currentUserLogin))
RetrieveCurrentUserLogin();
return string.IsNullOrEmpty(_currentUserLogin) ? _currentUserLogin : _currentUserLogin.Replace(@"\\", @"\");
}
set {
if (_currentUserLogin != value) {
_currentUserLogin = value;
RaisePropertyChanged(CurrentUserLoginPropertyName);
}
}
}
private void RetrieveCurrentUserLogin() {
DataService.GetCurrentUserLogin(result => {
DispatcherHelper.UIDispatcher.BeginInvoke(() => {
CurrentUserLogin = result;
});
});
}
这是我的数据服务的样子:
public void GetCurrentUserLogin(Action<string> callback) {
// create query request
var query = OnDemandContext.CreateQuery<string>("GetCurrentUserLogin");
var request = (HttpWebRequest)WebRequest.Create(query.RequestUri);
request.BeginGetResponse(asyncResult => {
var responseStream = request.EndGetResponse(asyncResult).GetResponseStream();
var responseDocument = XDocument.Load(responseStream);
callback(responseDocument.Root.Value);
}, null);
}
当我运行我的SL应用程序时,一切都很好。然而,当我尝试使用SL单元测试框架编写单元测试时,出现了问题。我可以测试我的数据服务,但似乎DispatcherHelper在所有测试中都会出现问题,因为当触发DispatcherHelper.UIDispatcher时,它总是为空。我认为这与初始化有关(在我的SL应用程序的Application_Startup()中)。我尝试在我的测试应用程序中初始化它,但没有帮助。我还尝试使用DispatcherHelper.CheckBeginInvokeOnUI(),但对问题没有影响。
有什么想法吗?