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