我正在尝试将 MVVM 与我的 windows phone 7 应用程序一起使用。我对如何做到这一点有点困惑。
我有一个用于在 Web 浏览器中导航的代码隐藏事件。现在,此事件最终将调用一个方法,该方法将使用户使用 Google oAuth 登录。
现在调用 Google 登录方法的代码在我的服务层中。我不确定是否应该在我的 VM 中创建一个调用我的服务层的属性,或者我是否应该直接在我的代码隐藏页面中创建一个服务层对象并直接调用它。
最好的方法是什么?
编辑
这是我所做的
// 后面的代码
private void wbGoogle_Navigating(object sender, NavigatingEventArgs e)
{
var queryParmas = e.Uri.ParseQueryString();
var code = queryParmas.ToList().Where(x => x.Key == "code").FirstOrDefault();
if (!code.Equals(new KeyValuePair<string, string>()))
{
loginVm.AuthenticateUser(code.Value, TestCallBack);
}
}
private void TestCallBack(Authorization a)
{
var d = a;
// maybe assign "a" to some property back in the VM.
}
// 虚拟机
public void AuthenticateUser(string code, Action<GoogleContacts.Model.Authorization> CallbackOnSuccess)
{
loginService.SendCode(code, CallbackOnSuccess);
}
//服务层
public void SendCode(string code, Action<Authorization> CallbackOnSuccess)
{
var request = new RestRequest(TokenEndPoint, Method.POST);
request.AddParameter("code", code);
request.AddParameter("client_id", ClientId);
request.AddParameter("client_secret", SecretKey);
request.AddParameter("grant_type", GrantType);
request.AddParameter("redirect_uri", RedirectUrl);
client.ExecuteAsync<Authorization>(request, response =>
{
CallbackOnSuccess(response.Data);
});
}