【发布时间】:2014-09-21 09:29:15
【问题描述】:
我继承了一个使用 Prism MVVM 的 WPF MVVM 项目。我想在视图上使用 Awesomium WebControl。我在 xaml 中定义了 WebControl,如下所示:
<awe:WebControl Name="taskBrowser" Source="http://localhost:59298/Tasks" Height="680" Width="680">
这很好用,但我还需要能够将数据从网页中的 Javascript 事件传递到 WPF 应用程序。当我在代码隐藏中执行此操作时,我有此工作,但是由于我们使用的是 MVVM,所以我想以“正确”的方式做事,并且不知何故不在后面的代码中执行,而是在 ViewModel 中执行。所以问题 1 是:我需要在 ViewModel 中连接一个 DocumentReady 事件,如下所示。
问题 2 是:我需要对 ViewModel 中的 taskBrowser 进行一些引用,以便能够执行如下所示的“taskBrowser.CreateGlobalJavascriptObject”命令将网页 js 连接到 WPF 方法。但是在 ViewModel un-MVVM 中有对 taskBrowser 对象的引用吗?我怎么能通过这个参考?无论如何,谁能告诉我如何解决这两个问题?
public MyCodeBehindConstructor()
{
{
InitializeComponent();
...
taskBrowser.DocumentReady += TaskBrowserOnDocumentReady;
}
}
private void TaskBrowserOnDocumentReady(object sender, UrlEventArgs urlEventArgs)
{
taskBrowser.DocumentReady -= TaskBrowserOnDocumentReady;
JSObject jsobject = taskBrowser.CreateGlobalJavascriptObject("jsobject");
jsobject.Bind("callNETNoReturn", false, JSHandler);
}
private void JSHandler(object sender, JavascriptMethodEventArgs args)
{
if (args.MustReturnValue)
{
Console.WriteLine("Got method call with return request");
args.Result = "Returning " + args.Arguments[0];
}
else
{
Console.WriteLine("Got method call with no return request");
}
}
【问题讨论】: