我有一个实现 WPF WebBrowser 控件的应用程序。它加载一个页面,其中包含一些必须从我的应用程序(可能来自其他线程)调用的 JS 函数。最好,我想坚持 MVVM 模式,并将用于解析函数返回的代码保留在模型中。调用 WebBrowser 对象的 InvokeScript 方法应该发生在 Dispatcher 线程上(因此也发生在视图中),因为它是一个 UI 元素。
我目前为完成这项工作而采取的步骤是(大致是伪的):
- subscribe to the LoadCompleted event of the browser (view)
- set the browser source (model -> viewmodel -> view)
- catch the LoadCompleted event (view -> viewmodel -> model)
- some logic (model)
- invoke script (model -> viewmodel -> view)
- get script result (view -> viewmodel -> model)
- some logic (model)
这会导致模型和视图之间(通过视图模型)进行相当多的来回通信。由于我对 WPF(或 MVVM)没有那么丰富的经验,我想知道是否有一种更简洁的方式来完成这项任务(我的意思是更简洁:模型、视图模型和视图之间的调用和事件更少)。