我刚刚思考将我们的一个自定义控件转换为WPF,但是它使用了我们另一个Winforms编写的自定义控件。
由于没有使用MVVM就使用WPF几乎没有意义。那么,我该如何对在WPF控件中使用的Winforms控件进行数据绑定呢?
(我没有太多的WPF经验,所以我可能完全没有理解重点)
我刚刚思考将我们的一个自定义控件转换为WPF,但是它使用了我们另一个Winforms编写的自定义控件。
由于没有使用MVVM就使用WPF几乎没有意义。那么,我该如何对在WPF控件中使用的Winforms控件进行数据绑定呢?
(我没有太多的WPF经验,所以我可能完全没有理解重点)
我认为您需要将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); }
}
}
<local:WinFormsWrapper />
声明它,如果在代码中,您只需创建一个新的并将其添加为另一个控件或窗口的子级即可。我将其更改为static
以使上面的示例构建,尽管在我查看此案例时可能最好不是静态的。我很久以前就回答了这个问题。我现在不怎么做WPF了。 - jonathanpeppers