gpt4 book ai didi

wpf - 如何将数据绑定(bind)到托管在 WPF 控件中的 Winform 控件?

转载 作者:行者123 更新时间:2023-12-04 22:30:56 25 4
gpt4 key购买 nike

我只是想将我们的一个自定义控件转换为 WPF,但是它使用了我们的另一个自定义控件,它是用 Winforms 编写的。

因为在没有 MVVM 的情况下使用 WPF 毫无意义。如何将数据绑定(bind)到 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); }
}
}

假设您的 WinForms 控件上有一个 IsSpinning 属性。根据您的需要,实现 INotifyPropertyChanged 而不是使用 DependencyProperties 可能更简单。


由 Ian Ringrose 添加:

这个示例代码显然是错误的(参见关于 _control 是静态的评论),但展示了如何解决问题。由于我目前没有使用 WPF,因此我不会编辑代码,因为我无法测试我的编辑。

我将此答案保留为已接受的答案,因为它包含解决问题所需的信息。

我已将此添加到答案中,因为评论有时会被删除,这是来自进行谷歌搜索的人的观点。

关于wpf - 如何将数据绑定(bind)到托管在 WPF 控件中的 Winform 控件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7335123/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com