Xamarin.Forms ViewModel在Page load上访问过两次

问题描述 投票:1回答:1

我在我的页面的一个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中,我为页面和viewmodel之间的所有操作设置了绑定上下文。

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

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

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

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

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

不要加载viewmodel两次。

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

c# mvvm model-binding
1个回答
0
投票

你初始化它两次。一次进入OnAppearing,一次进入构造函数。尝试创建一个属性:

public ACheckPageViewModel VM {get; set;} 

和OnAppearing设置如下:

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

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

© www.soinside.com 2019 - 2024. All rights reserved.