我在我的页面的一个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属性?
你初始化它两次。一次进入OnAppearing,一次进入构造函数。尝试创建一个属性:
public ACheckPageViewModel VM {get; set;}
和OnAppearing设置如下:
VM = new ACheckPageViewModel();
this.BindingContext = VM;
之后,如果需要,可以根据需要使用VM属性。