如何为子UserControl实现IActivationForViewFetcher?

时间:2016-07-06 05:20:28

标签: winforms reactiveui

我刚刚将ReactiveUI添加到现有代码库中。当然,对于第一次控制我尝试了,我遇到了障碍。我将它与嵌入在TabControl中的UserControl一起使用。代码看起来像这样:

public partial class TabPageControl : UserControl, IViewFor<TestViewModel>
{
    public TabPageControl()
    {
        InitializeComponent();

        ViewModel = new TestViewModel();

        this.WhenActivated(dispose =>
        {
            dispose(this.Bind( ... ));
            dispose(this.BindCommand( ... ));
        });
    }
}

当我运行应用程序时,收到以下错误消息:

  

不知道如何检测TabPageControl   激活/停用,您可能需要实施   IActivationForViewFetcher

那么,我该如何实现IActivationForViewFetcher?我不确定我应该对GetAffinityForView做些什么。我在GetActivationForView中假设我需要检查UserControl是否在TabControl中当前可见?

2 个答案:

答案 0 :(得分:1)

虽然我想了解如何实现IActivationForViewFetcher的方法(特别是我确定控件在VisualTree中的部分) - 我问题的真正原因是我的主程序集没有有适当的引用(控件在类程序集中)。

我假设(因为我已经浏览了ReactiveUI源)ReactiveUI.Winforms.Registrations需要由主程序集实例化 - 包括注册ActivationForViewFetcher

顺便提一下,类库是用C#编写的,主程序集是VB.NET。所以我不确定这是否导致了这个问题。

至少它现在正在运作!

答案 1 :(得分:0)

因为该线程太旧了,所以我不能帮助任何人。

解决了我的问题的是,在应用程序上运行的所有项目/插件上都有ReactiveUI.WPF,ReactiveUI.WinFormsCefSharp.WPFCefSharp.WinForms NuGet引用。

我的怀疑是,当初始化ReactiveUI/CefSharp并且它不包含所需的全部info/files时,以后将无法在运行时添加它们。但这只是根据我的经验进行的猜测。