【问题标题】:How to implement two way binding between an ActiveX control and a WPF MVVM View Model如何在 ActiveX 控件和 WPF MVVM 视图模型之间实现双向绑定
【发布时间】:2011-12-27 17:20:21
【问题描述】:

我有一个使用 MVVM 框架实现的 WPF 应用程序,该框架使用 ActiveX 控件,我需要保持 WPF 和 ActiveX UI 同步。

到目前为止,当我使用从文章 Hosting an ActiveX Control in WPF 和这篇 question 中获得的问题底部的代码更改 WPF UI 时,我可以更新 ActiveX UI。

但是当我在 ActiveX UI 中进行更改时,我无法更新 WPF UI。

我怀疑我需要从我的 ActiveX 控件中触发 PropertyChanged 事件,但我不知道如何执行此操作,或者是否有可能。

我编写的 ActiveX 控件是在 VB6 和 MFC 中编写的,因为此时我只是在制作原型,以便最终将 VB6 ActiveX 控件集成到 WPF 容器应用程序中。

这是一个代码片段,显示了到目前为止所做的工作:

System.Windows.Forms.Integration.WindowsFormsHost host = new System.Windows.Forms.Integration.WindowsFormsHost();

// Create the ActiveX control.
AxTEXTBOXActiveXLib.AxTEXTBOXActiveX axWmp = new AxTEXTBOXActiveXLib.AxTEXTBOXActiveX();

// Assign the ActiveX control as the host control's child.
host.Child = axWmp;

axWmp.DataBindings.Add(new System.Windows.Forms.Binding("ActiveXStatus", (MainWindowViewModel)this.DataContext, "ModelStatus", true, DataSourceUpdateMode.OnPropertyChanged ));

// Add the interop host control to the Grid
// control's collection of child controls.
this.activexRow.Children.Add(host);

如何在 ActiveX 控件和 WPF MVVM 视图模型之间实现双向绑定?

【问题讨论】:

    标签: wpf mvvm mfc vb6 activex


    【解决方案1】:

    您需要做的是创建一个 ActiveX 库,ActiveX 控件和 WPF 程序集都可以引用该库。在库中使用所需的任何复杂性的刷新方法创建一个界面。创建一个全局多用途方法,实现的对象可以使用它来注册自己。然后在 ActiveX 控件中,它可以检查是否已注册任何内容并触发刷新方法。然后在 WPF 程序集中,UI 可以实现接口并注册自身以提供它与 ActiveX 控件之间的连接。

    【讨论】:

    【解决方案2】:

    您将不得不找到某种方法来通知 WPF ActiveX 控件中的数据已更改。这通常在 WPF 中通过实现 INotifyPropertyChanged 或使用 ObservableCollections 来处理。只是绑定一个属性也不会更新 WPF 的 UI,尝试将视图中的某些内容绑定到 viewmodel 上的属性,而不是使用 INotifyPropertyChanged。如果您可以控制 activex 源,使用事件应该很容易做到这一点。

    【讨论】:

    • 能否请您指出一个示例,该示例显示如何使用来自 MFC 或 VB6 ActiveX 控件的事件,以便我实现 INotifyPropertyChanged,因为一旦我的原型工作,我就可以访问源代码?
    • 如果您询问如何使用来自 activex 控件的事件,您可以像处理任何其他暴露事件的对象一样执行此操作,即 mycontrol.myevent += mycontrol_myeventhandler;如果你问如何编写 activex 控件来引发事件,我不知道,这可能会让你开始:stackoverflow.com/questions/1455577/…
    猜你喜欢
    • 1970-01-01
    • 2011-10-07
    • 1970-01-01
    • 2017-09-24
    • 1970-01-01
    • 2011-07-14
    • 2013-03-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多