Как реализовать двухстороннее связывание между элементом управления ActiveX и моделью представления WPF MVVM - PullRequest
1 голос
/ 12 ноября 2011

У меня есть приложение WPF, реализованное с использованием инфраструктуры MVVM, в которой используется элемент управления ActiveX, и мне нужно синхронизировать интерфейс WPF и ActiveX.

До сих пор я мог обновлять интерфейс ActiveX при изменении интерфейса WPF.используя код внизу вопроса, который я получил из статьи Размещение элемента управления ActiveX в WPF и этот вопрос .

Но я не могу обновить пользовательский интерфейс WPFкогда я делаю изменения в пользовательском интерфейсе ActiveX.

Я подозреваю, что мне нужно запустить событие PropertyChanged из своего элемента управления ActiveX, но я не знаю, как это сделать или вообще возможно.

Элементы управления ActiveX, которые я написал, находятся в VB6 и MFC, так как сейчас я только создаю прототипы для возможной интеграции элементов управления VX6 ActiveX в приложение WPF contaner.

Вот фрагмент кода, который указывает работусделано до сих пор:

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?

Ответы [ 2 ]

1 голос
/ 14 ноября 2011

Что вам нужно сделать, это создать библиотеку ActiveX, на которую может ссылаться как элемент управления ActiveX, так и сборка WPF. В библиотеке создайте интерфейс с методом обновления любой сложности, которая вам нужна. Создайте глобальный многоцелевой метод, который реализуемые объекты могут использовать для самостоятельной регистрации. Затем в элементе управления ActiveX он может проверить, было ли что-либо зарегистрировано, и запустить метод обновления. Затем в сборке WPF пользовательский интерфейс может реализовать интерфейс и зарегистрировать себя, обеспечивая соединение между ним и элементом управления ActiveX.

1 голос
/ 13 ноября 2011

Вам нужно будет найти способ уведомить WPF об изменении данных в элементе управления ActiveX.Это обычно обрабатывается в WPF путем реализации INotifyPropertyChanged или с помощью ObservableCollections.Просто связывание свойства не обновляет пользовательский интерфейс для WPF, попробуйте связать что-то в вашем представлении со свойством в модели представления и не использовать INotifyPropertyChanged.Если у вас есть контроль над источником activex, это легко сделать с помощью событий.

...