如何使用Caliburn Micro ActivateItem等待并从ViewModel获取返回值

时间:2019-09-20 03:47:11

标签: c# wpf mvvm caliburn.micro nancy

我正在开发可以与浏览器通信的桌面应用程序。我想要的是将参数从浏览器发送到桌面应用程序以执行某些处理,然后获取返回值作为值。

在应用程序中,我使用Nancy从浏览器获取POST数据。然后,我将数据作为参数传递给SignHashViewModel进行一些处理,但是我无法从SignHashViewModel中获取值。

我正在尝试学习asyncawait以查看是否可以解决问题,但是我不知道如何将其应用于我的代码。

下面的Javascript代码将字符串哈希值发布到Nancy服务器,并返回结果:

Signhash.php

<?php

  if (isset($_GET['hashStr'])) 
  {
    $hashStr = $_GET['hashStr']; // get param from URL
  }
?>

<script type="text/javascript">

    $(document).ready(function() {

        var hash = JSON.stringify("<?php echo $hashStr ?>");

        $.post("http://localhost:50011/MyProject/signHash", {hash}, function(data) //this line will post hash to nancy server and get the data as result
        {
            var result = JSON.parse(data);
            console.log("ErrCode : " + result.ErrCode );
            console.log("ErrMsg : " + result.ErrMsg );
            console.log("CertData : " + result.CertData );
        });
    }); 
</script>    

从我使用此类的JavaScript中获取POST数据。

ServerModule.cs

Post ("/signHash", (args) =>
{
  string result = null;
  List<string> dataItem= new List<string>();

  ActivateItems.OpenItem(new SignHashViewModel(dataItem)); //This line activate the screen with param

  return result; // Here I dont know how to get return value from SignHashViewModel
});

此类将签署哈希值

SignHashViewModel.cs

public SignHashViewModel(List<string> dataItem)
{
   DataItem = dataItem; // Set as Property
}

public PDFInfo Sign() //Run this method when button is clicked
{
   PDFInfo pi = new PDFInfo();
   SignHashToken jsonData = new SignHashToken();

   pi = jsonData.SignHash(DataItem , userPin); //

   return result;
}

我希望我可以得到SignHashViewModel的结果并传递给浏览器。希望有人能在此方面为我提供帮助或提供其他解决方案也很好,谢谢。

0 个答案:

没有答案