我正在使用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");
});
}
}
我想念什么?
答案 0 :(得分:1)
[发布我的评论的扩展版本以作为完整性的答案。]
确保您分配了MyFragment / BaseReactiveFragment的ViewModel属性。仅当您使用ReactiveUI的路由基础结构时,才会自动分配ViewModel属性。 RoutedViewHost或ViewModelViewHost。但是,由于Android使用不同的机制(意图)进行Activity构造,因此ReactiveUI.Android不包含这些帮助器。
很高兴听到这很简单。编码愉快!