Xamarin.Forms ViewModel在页面加载中访问了两次

时间:2019-02-27 19:45:39

标签: c# mvvm model-binding

在我的页面的一个ViewModel上调试代码时,我发现了它。

我后面有这样的页面代码:

    protected override void OnAppearing()
    {
        this.BindingContext = new ACheckPageViewModel();
    }

    public ACheckPage ()
    {
        InitializeComponent ();
        ACheckPageViewModel viewmodel = new ACheckPageViewModel();
        //some code that needs viewmodel reference:
        if (viewmodel.SomeValue == "")
        {
            SomeValue.IsVisible = false;
        }
    }

在OnAppearing中,我为页面和视图模型之间的所有操作设置了绑定上下文。

但是在ACHeckPage()主要方法中,我再次引用viewmodel来设置页面上依赖于viewmodel其他值的某些属性。

我无法从viewmodel访问这些xaml控件,这就是为什么我在main方法中再次引用viewmodel的原因。

我发现当我加载页面并调试视图模型时,断点会被访问两次。

我在XAML中设置绑定上下文的页面如下:

<ContentPage.BindingContext>
    <vm:FeaturedPageViewModel/>
</ContentPage.BindingContext>

不要两次加载视图模型。

如何在不两次运行代码的情况下,根据ViewModel的其他属性来更改Page控件的属性?

1 个答案:

答案 0 :(得分:0)

您将其初始化两次。一次在OnAppearing中,一次在构造函数中。 尝试创建属性:

public ACheckPageViewModel VM {get; set;} 

和OnAppearing设置如下:

VM  = new ACheckPageViewModel();
this.BindingContext = VM;

之后,您可以根据需要使用VM属性。