Я пытаюсь использовать MVVM для привязки элемента управления формы Windows к панели в WPF. Моя общая цель - динамически изменять, какой конкретный элемент управления Windows Form я буду использовать, поскольку планирую наличие нескольких доступных.Как связать элемент управления Windows Form с панелью «Grid» с использованием MVVM в WPF
Прямо сейчас, я смог заставить это работать, когда приложение запускает обратный вызов при инициализации, который обращается к объекту сетки по имени. Вот как XAML в настоящее время выглядит:
<Grid Name="WindowsControlObject"></Grid>
Обратный вызов выглядит следующим образом:
private void WindowLoaded(object sender, RoutedEventArgs e)
{
System.Windows.Forms.Integration.WindowsFormsHost host =
new System.Windows.Forms.Integration.WindowsFormsHost();
System.Windows.Forms.Control activeXControl = new SomeWindowsControl();
host.Child = activeXControl;
this.WindowsControlObject.Children.Add(host);
}
В то время как это работает, я пытаюсь полностью использовать шаблон MVVM, как таковой, есть ли способ я могу сделать что-то вроде следующего в XAML/видовую:
XAML:
<Grid Content="{Binding WindowsControl"></Grid>
в моем режиме lView:
public class MyModelView
{
public Grid WindowsControl;
public MyModelView{
WindowsControl = new Grid;
System.Windows.Forms.Integration.WindowsFormsHost host =
new System.Windows.Forms.Integration.WindowsFormsHost();
System.Windows.Forms.Control activeXControl = new SomeWindowsControl();
host.Child = activeXControl;
WindowsControl.WindowsControlObject.Children.Add(host);
}
}
Я даже прав в своем исследовании/возможном подходе? Мне пришло в голову, что мне может понадобиться использовать панель другого типа (кроме сетки), но пока не обнаружили ничего очевидного. Если это невозможно, у меня есть решение, просто не очень чистое.
Doing выясняется, что я действительно хотел связать это с тегом ContentControl следующим образом: XAML: ViewModel: public MyModelView { private System.Windows.Forms.Control _myControl; общественный WindowsFormsHost STKObject { { { } возвращение новых WindowsFormsHost() {Child = _myControl}; } } } –
Aerophilic
Не понимаю ваш вопрос, вы хотите добавить элемент управления 'хозяин' к вашей привязке' Grid'? –