在ViewModel中未调用WhenActivated

时间:2018-09-20 09:19:29

标签: android xamarin xamarin.android reactiveui

我正在使用ReactiveUI 8.7.2创建具有共享ViewModel的android / iOS Xamarin.Native应用。我想在片段和相应的ViewModel中使用WhenActivated,但仅在片段中调用它。这是我的代码:

基本ViewModel:

public class ReactiveViewModel : ReactiveObject, ISupportsActivation
{
    public ViewModelActivator Activator { get; }

    public ReactiveViewModel(ViewModelActivator viewModelActivator)
    {
        Activator = viewModelActivator;

        this.WhenActivated((Action<IDisposable> disposable) =>
        {
            Console.WriteLine("Activated BaseViewModel");
        });
    }

    public ReactiveViewModel() : this(new ViewModelActivator())
    {
    }
}

基本片段:

public abstract class BaseReactiveFragment<T> : ReactiveUI.AndroidSupport.ReactiveFragment<T> where T : ReactiveViewModel
{
    public BaseReactiveFragment()
    {
        this.WhenActivated(disposable =>
        {
            Console.WriteLine("Activated BaseFrament");
        });
    }
}

ViewModel

public class MyViewModel : ReactiveViewModel
{
    public MyViewModel()
    {
        this.WhenActivated((Action<IDisposable> disposable) =>
        {
            Console.WriteLine("Activated ViewModel");
        });
    }
}

片段

public class MyFragment : BaseReactiveFragment<MyViewModel>
{
    public MyFragment() 
    {
        this.WhenActivated((Action<IDisposable> disposable)=>
        {
            Console.WriteLine("Activated Fragment");
        });
    }
}

我想念什么?

1 个答案:

答案 0 :(得分:1)

[发布我的评论的扩展版本以作为完整性的答案。]

确保您分配了MyFragment / BaseReactiveFragment的ViewModel属性。仅当您使用ReactiveUI的路由基础结构时,才会自动分配ViewModel属性。 RoutedViewHostViewModelViewHost。但是,由于Android使用不同的机制(意图)进行Activity构造,因此ReactiveUI.Android不包含这些帮助器。

很高兴听到这很简单。编码愉快!