2013-07-13 3 views
1

Я пытаюсь использовать 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); 
    } 
} 

Я даже прав в своем исследовании/возможном подходе? Мне пришло в голову, что мне может понадобиться использовать панель другого типа (кроме сетки), но пока не обнаружили ничего очевидного. Если это невозможно, у меня есть решение, просто не очень чистое.

+0

Doing выясняется, что я действительно хотел связать это с тегом ContentControl следующим образом: XAML: ViewModel: public MyModelView { private System.Windows.Forms.Control _myControl; общественный WindowsFormsHost STKObject { { { } возвращение новых WindowsFormsHost() {Child = _myControl}; } } } – Aerophilic

+0

Не понимаю ваш вопрос, вы хотите добавить элемент управления 'хозяин' к вашей привязке' Grid'? –

ответ

0

Делать больше рыть, получается, что я действительно хотел, чтобы связать это с тегом "ContentControl", следующим образом:

XAML:

<ContentControl Content="{Binding WindowsControl}"/> 

ViewModel:

private System.Windows.Forms.Control _myControl; 

    public WindowsFormsHost STKObject 
    { 
     get 
     { 
      return new WindowsFormsHost() { Child = _myControl}; 
     } 
    } 
Смежные вопросы