mvvmlight 架构中经常要用到的
mvvmlight view向viewmodel中传值,mvvmlight 中如何打开新窗口,异步关闭窗口实现半闭窗口时,等待完整版的cookie到来
mvvmlight view向viewmodel中传值
1.viewmodel中进行消息注册,当收到指定类型的消息时给到哪个属性
Messenger.Default.Register<string>(this, s => Result = s);
当收到字符串消息时给到Result这个属性
2.View中进行发送
当result为true发送一个"Accepted"到当前的viewmodel中。
var result = true
Messenger.Default.Send(result ? "Accepted" : "Rejected");
mvvmlight 中如何打开新窗口
1.Viewxxx.cs中 调用要打开窗口的view 和viewmodel, 并传替参数给viewmodel中的属性。 然后对view和viewmode进行关联 。如果要取返回值的话,直接调用要打开窗口的viewmodel,对一个要返回的属性进行赋值 。
var modalWindowVM = SimpleIoc.Default.GetInstance<LoginWindowViewModel>();
modalWindowVM.MyText = message.Argument;
var modalWindow = new LoginWindow()
{
DataContext = modalWindowVM
};
var result = modalWindow.ShowDialog() ?? false;
异步关闭窗口
目的:做到半闭窗口的时候,把当前的cookie读取完毕,读取cookie是一个导步的方法,所以要等异步执行完,再手动调用this.close去关闭。 如果不去异步等待的话,cookie值不全,还没得到,窗口就关闭了。
在cs界面中加
Closing += OnClosingWindow;
private bool _closeConfirmed;
private async void OnClosingWindow(object sender, CancelEventArgs e)
{
if (!_closeConfirmed) //防止再次进入
{
e.Cancel = true;//取消自动关闭
var result = await getCookie(); //等异步执行结果
if (result)
{
//获得异步执行结果,然后更改变量,不再再次进入
_closeConfirmed = true;
//手动关闭窗口。
this.Close();
}
}
}
//获取据所有的cookie
private async Task<bool> getCookie()
{
var cookieManager = CefSharp.Cef.GetGlobalCookieManager();
CookieVisitor visitor = new CookieVisitor();
visitor.SendCookie += visitor_SendCookie;
//cookieManager.VisitAllCookies(visitor);
List<Cookie> ls = await cookieManager.VisitAllCookiesAsync();
if (ls.Count > 0)
{
foreach (Cookie obj in ls)
{
pageCookie += obj.Name + "=" + obj.Value + ";";
}
return true;
}
return false;
}
相关参考代码
private async void Button_Click(object sender, RoutedEventArgs e)
{
var proxy = new ServiceReference1.ServiceClient();
var photo = await proxy.getEmployeePhotoAsync(12);
label.Content = photo.Length;
proxy.Close();
}
https://stackoverflow.com/questions/38473254/windows-form-after-close-and-reopen-findform-is-null-async-await-winforms-wi?r=SearchResults
https://stackoverflow.com/questions/38473254/windows-form-after-close-and-reopen-findform-is-null-async-await-winforms-wi?r=SearchResults
还不快抢沙发