Как связать данные с элементом управления Winform, размещенным в элементе управления WPF? - PullRequest
3 голосов
/ 07 сентября 2011

Я только что подумал о преобразовании одного из наших пользовательских элементов управления в WPF, однако он использует другой наш собственный элемент управления, который называется Winforms.

Поскольку нет смысла использовать WPF без MVVM.Как я могу привязать данные к элементу управления Winforms, который используется в элементе управления WPF.

(у меня мало опыта работы с WPF, поэтому я могу полностью упустить момент)

1 Ответ

6 голосов
/ 07 сентября 2011

Я думаю, вам нужно будет обернуть элемент управления WinForms в класс, представляющий DependencyProperties или, по крайней мере, реализующий INotifyPropertyChanged.

Таким образом, у вас будет такой класс:

public class WinFormsWrapper : WindowsFormsHost
{
   //You'll have to setup the control as needed
   private static MyWinFormsControl _control;

   public static readonly DependencyProperty IsSpinningProperty = DependencyProperty.Register("IsSpinning", typeof(bool), typeof(WinFormsWrapper), 
        new FrameworkPropertyMetadata(_control.IsSpinning, new PropertyChangedCallback(IsSpinning_Changed)));

    private static void IsSpinning_Changed(DependencyObject sender, DependencyPropertyChangedEventArgs e)
    {
        _control.IsSpinning = (bool)e.NewValue;
    }

    public bool IsSpinning
    {
        get { return (bool)GetValue(IsSpinningProperty); }
        set { SetValue(IsSpinningProperty, value); }
    }
}

Предполагаетсячто у вас есть свойство IsSpinning в вашем элементе управления WinForms.В зависимости от ваших потребностей может быть проще реализовать INotifyPropertyChanged вместо использования DependencyProperties.


Добавлено Ian Ringrose:

Этот пример кода явно неправильный (см. Комментарии о том, что _control является статическим), но показывает, как решить проблему.Поскольку в настоящее время я не использую WPF, я не собираюсь редактировать код, поскольку не могу проверить свои правки.

Я оставляю этот ответ в качестве принятого ответа, поскольку он содержит информацию, необходимую для решенияпроблема.

Я добавил это к ответу, поскольку комментарии иногда удаляются, и это мнения получателей от людей, выполняющих поиск в Google.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...