进入页面时,我正在运行以下代码:
protected override async void OnAppearing()
{
base.OnAppearing();
Title = wasteObject.WasteType;
foreach (var i in wasteDescription)
{
if (i.description_Id == wasteObject.Waste_Id)
{
await viewModel.getDescription(i.wasteImage, i.sortName, i.wasteDescription, myWebView, (error) =>
{
if(error != null)
{
DisplayAlert("Problem", "Not possible", "Ok");
}
});
}
}
}
我遇到的问题是,当我离开该页面并返回页面时。它已经创建了2个带有文本的块(两个块中的文本相同)。所以我想做的是只运行一次代码,以防止显示多个文本。
感谢所有帮助,谢谢。
答案 0 :(得分:3)
正如@mjwills在评论中所说, 使用布尔值字段指示代码是否已经执行。 在方法OnAppearing之外声明字段
private bool isTextBlockCreated = false;
然后使用isTextBlockCreated将只需要运行一次的代码放入条件检查中
if(!isTextBlockCreated)
{
foreach (var i in wasteDescription)
{
if (i.description_Id == wasteObject.Waste_Id)
{
await viewModel.getDescription(i.wasteImage, i.sortName, i.wasteDescription, myWebView, (error) =>
{
if(error != null)
{
DisplayAlert("Problem", "Not possible", "Ok");
}
});
}
}
isTextBlockCreated = true;
}
那应该停止多次运行。
答案 1 :(得分:0)
正如@LeRoy所说,您可以在运行Init的构造函数中运行它,该构造函数调用viewModel.getDescription()。
protected override async void OnBindingContextChanged()
{
base.OnBindingContextChanged();
if (BindingContext is MyPageViewModel viewModel)
{
foreach (var i in wasteDescription)
{
if (i.description_Id == wasteObject.Waste_Id)
{
await viewModel.getDescription(i.wasteImage, i.sortName, i.wasteDescription, myWebView, (error) =>
{
if(error != null)
{
DisplayAlert("Problem", "Not possible", "Ok");
}
});
}
}
另一种方法是,由于您具有OnAppearing,因此也有OnDisappearing,然后可以删除由Appearing添加的块。