Xamarin表单:WhenActivated没有为viewmodel触发activeui

时间:2018-05-31 22:14:48

标签: xamarin.forms reactiveui

我无法理解为什么没有为Xamarin Forms应用程序触发WhenActivated func。该应用程序具有LoginViewModel和LoginView

  • LoginView:继承自ContentPageBase,它本身派生自:我认为是期待的ContentPage,IViewFor
  • LoginViewModel:ReactiveObject,IRoutableViewModel,ISupportsActivation

这是示例应用程序代码。

第一个视图LoginView按预期加载。但是,我最好在WhenActivated func中加载服务和设置绑定,但它不会触发。请参阅LoginViewModel。

有什么想法吗?

Source code

感谢

1 个答案:

答案 0 :(得分:2)

好的ossentoo,我不确定为什么,但似乎你想在你的视图模型上使用 WhenActivated ,你必须在你的视图上激活时使用,绑定是放在视图后面的代码上。这是一个小例子:

public class LoginViewModel : ViewModelBase /*IRoutableViewModel, ISupportsActivation etc*/
{

    this.WhenActivated(disposables =>
        {
            Debug.WriteLine("ViewModel activated.").DisposeWith(disposables);
        });

}

在视图上:

public partial class LoginView : ContentPageBase<LoginViewModel>
{
    public LoginView()
    {
        InitializeComponent ();
        this.WhenActivated(new Action<CompositeDisposable>(c =>
        {
            System.Diagnostics.Debug.WriteLine("From View ! (When Activated)");

          /*instead of xaml bindings you can use ReactiveUI bindings*/
           this.Bind(ViewModel, vm => vm.UserName,
                v => v.UserName.Text).DisposeWith(disposables);
            this.Bind(ViewModel, vm => vm.Password,
                v => v.Password.Text).DisposeWith(disposables);
        }));
    }
}

如果这有助于您,请告诉我。 :)