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

本文由 hcb 创作,采用 知识共享署名 3.0,可自由转载、引用,但需署名作者且注明文章出处。

还不快抢沙发

添加新评论