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



我正在尝试学习反应性。我一直在存储库中的WPF示例项目https://github.com/reactiveui/reactiveui/tree/tree/master/samples/getting-started

我决定尝试将其转换为Winforms,但有问题。

在WPF示例中,搜索函数通过oaph填充了" Main" ViewModel(AppViewModel)的属性,称为searchResults,它是" child''''''ViewModels(NugetDetailsviewModel)的IEnumeraults

public IEnumerable<NugetDetailsViewModel> SearchResults => _searchResults.Value;

在" Main"视图(MainWindow)中,有一个列表框,其itempt oft boct of toceults键入了搜索量,即viewmodels的iEnumerable。似乎正在进行一些巫术,可以找到并显示给定ViewModel的适当视图。它甚至在评论中说:

在我们的MainWindow中,当我们在列表框中注册NugetDetailsviewModels的列表框时,如果未声明ItemTemplate,它将搜索从IViewFor中派生的类,并显示该项目。

>

在winforms i think 我有两个问题,但我可能会出现一个..或更多:

  1. 似乎并不是找到ViewModel的视图的巫术,但这可能是由于问题二。
  2. 如何将ViewModels的Ienumerable绑定到Winforms控件?

在Winforms中,我正在使用flowlayoutpanel代替列表框,并尝试了几种变体:

this.OneWayBind(ViewModel, vm => vm.ResultsList, v => v.flowLayoutPanel1.DataBindings)

我能够直接在视图中使用一些转换代码来直接更新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;
            } ));

为清楚起见,与我的"孩子" ViewModel链接的"孩子"视图也源自ReactiveUserControl。

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

Locator.CurrentMutable.RegisterViewsForViewModels(Assembly.GetCallingAssembly());

并检查了它们是否已注册。


如果有人能够提供帮助。

作为附录,如果有人知道使用ReactiveUI知道一些更复杂的示例项目,尤其是使用Winforms,这将非常有帮助。

谢谢。

在reactiveui 9.11中有一个新功能,它允许您绑定到具有Control.ControlCollectionTableLayoutControlCollection

的任何控件

这将使您可以自动添加到控件中。

这是由称为ISetMethodBindingConverter的新界面提供的,该界面使您可以覆盖我们绑定引擎中的"集合"的工作方式。

现在有一个用于Winforms申请的示例:https://github.com/reactiveui/reactiveui.samples/tree/master/master/winforms/reactivedemo

相关内容

  • 没有找到相关文章

最新更新