如何使用ReactiveUI和winforms绑定到用户控件

如何使用ReactiveUI和winforms绑定到用户控件,winforms,binding,system.reactive,reactiveui,Winforms,Binding,System.reactive,Reactiveui,我正在努力学习反应UI。我一直在查看存储库中的wpf示例项目 我决定尝试将其转换为winforms,但遇到了一个问题 在wpf示例中,搜索函数通过OAPH填充名为SearchResults的“主”视图模型(AppViewModel)的属性,该属性是“子”视图模型(NuGetDetailsViewModel)的IEnumerable 我已经能够在视图中直接使用一些转换代码来直接更新flowLayoutPanel,但是它需要直接了解子视图,并且不适合我,并且不像我希望的那样自动 this.OneWa

我正在努力学习反应UI。我一直在查看存储库中的wpf示例项目

我决定尝试将其转换为winforms,但遇到了一个问题

在wpf示例中,搜索函数通过OAPH填充名为SearchResults的“主”视图模型(AppViewModel)的属性,该属性是“子”视图模型(NuGetDetailsViewModel)的IEnumerable

我已经能够在视图中直接使用一些转换代码来直接更新flowLayoutPanel,但是它需要直接了解子视图,并且不适合我,并且不像我希望的那样自动

this.OneWayBind(ViewModel, 
            vm => vm.ResultsList,
            v  => v.flowLayoutPanel1, 
            selector: value => 
            {
                this.flowLayoutPanel1.Controls.Clear();
                foreach (var value in values)
                {
                    this.flowLayoutPanel1.Controls.Add(new AssemblyInfoView() { ViewModel = value });
                }
                return this.flowLayoutPanel1;
            } ));

为清晰起见,链接到我的“Child”视图模型的“Child”视图也源自ReactiveUserControl

我使用以下代码注册视图:

Locator.CurrentMutable.RegisterViewsForViewModels(Assembly.GetCallingAssembly());
并检查了他们是否已注册


如果有人能帮忙,我们将不胜感激

作为附录,如果有人知道一些更复杂的示例项目使用ReactiveUI,特别是使用winforms,那将非常有帮助


谢谢。

是否签出此示例?

是否签出此示例?

中有一个新功能,允许您绑定到任何具有
控件的控件。ControlCollection
TableLayoutControlCollection

这将允许您将其自动添加到控件的

这是由一个名为
ISetMethodBindingConverter
的新接口提供的,该接口允许您覆盖绑定引擎中的“Set”如何工作

现在这里有一个WinForms应用程序的示例:

中有一个新功能,允许您绑定到任何具有
控件的控件。ControlCollection
TableLayoutControlCollection

这将允许您将其自动添加到控件的

这是由一个名为
ISetMethodBindingConverter
的新接口提供的,该接口允许您覆盖绑定引擎中的“Set”如何工作


现在这里有一个WinForms应用程序的示例:

是的,这是我一直在使用的示例项目。请参阅我问题开头的链接。是的,这是我一直从事的示例项目。请参阅问题开头的链接。我将在不久的将来向ReactiveUI.Winforms库添加一个演示和一些实用程序。我将在不久的将来向ReactiveUI.Winforms库添加一个演示和一些实用程序。Glenn你是明星!这个例子很好。我确实有一些后续问题:ISetMethodBindingConverter,这是我需要了解的东西吗?从ViewModel获取视图,通常我应该将ViewModel传递给ViewModelControlHost还是使用ViewLocator,ViewModelControlHost是否做了我所缺少的事情?谢谢ViewModelControlHost有一个名为“ViewModel”的属性,设置该属性后,它将搜索继承IViewFor的控件,然后将其作为子控件。如果您注意到在Program.cs中我注册了视图,NugetDetailsView从该接口派生。此链接已失效。@GlennWatson请修复示例链接,谢谢Glenn您是明星!这个例子很好。我确实有一些后续问题:ISetMethodBindingConverter,这是我需要了解的东西吗?从ViewModel获取视图,通常我应该将ViewModel传递给ViewModelControlHost还是使用ViewLocator,ViewModelControlHost是否做了我所缺少的事情?谢谢ViewModelControlHost有一个名为“ViewModel”的属性,设置该属性后,它将搜索继承IViewFor的控件,然后将其作为子控件。如果您注意到在Program.cs中我注册了视图,NugetDetailsView从该接口派生。此链接已失效。@GlennWatson请修复示例链接,谢谢
this.OneWayBind(ViewModel, 
            vm => vm.ResultsList,
            v  => v.flowLayoutPanel1, 
            selector: value => 
            {
                this.flowLayoutPanel1.Controls.Clear();
                foreach (var value in values)
                {
                    this.flowLayoutPanel1.Controls.Add(new AssemblyInfoView() { ViewModel = value });
                }
                return this.flowLayoutPanel1;
            } ));
Locator.CurrentMutable.RegisterViewsForViewModels(Assembly.GetCallingAssembly());