首次访问后,带有字典的MAUI Shell导航为空

rjjhvcjd  于 2023-06-24  发布在  Shell
关注(0)|答案(1)|浏览(112)

在我的主ViewModel中,我试图转到另一个视图,并通过Dictionary传递一个对象,并使用它在该视图中加载值。我的问题是,它第一次工作,但后来被困在无限负载上,因为在第一次之后,传递的对象每次都是null。
例如,如果我点击按钮调用OpenSpecialInstructionsCommand,它会导航到SpecialInstructions视图和ViewModel,显示我需要看到的一切。完成后,我单击返回箭头转到主页,并找到另一个我想检查其特殊说明的对象。如果我现在点击按钮调用OpenSpecialInstructionsCommand,它会导航到SpecialInstructions,但它会被无限加载。我可以回去,并尝试再次对相同/不同的项目,甚至原来的,它仍然会加载无限期。
主视图模型:

[RelayCommand]
async Task OpenSpecialInstructions()
{
   if (LineItem == null)
      return;

   this.popupPage.Close();

   await Shell.Current.GoToAsync(nameof(SpecialInstructions), true, new Dictionary<string, 
   object>
   {
       {"LineItem", LineItem }
   });
}

这是工作罚款;每次调用时,我都有LineItem对象的正确值。
在新的ViewModel中:

[QueryProperty(nameof(LineItem), "LineItem")]

public partial class SpecialInstructionsViewModel : BaseViewModel
{
   [ObservableProperty]
   LineItem lineItem;

   [RelayCommand]
   async Task Instructions_Get()
   {
      IsBusy = true;
      if (App.SpecialInstructions.Count() == 0)
      {
         await PrefillSpecialInstructions();
      }
      SpecialInstructions = App.SpecialInstructions;
      foreach (SpecialInstruction instruction in App.DbConnection.SpecialInstructions_Get(LineItem.StockNumber))
      {
         try { SpecialInstructions.FirstOrDefault(x => x.MessageCode == instruction.MessageCode).IsSelected = true; } catch { }
      }
      IsBusy = false;
   }
}

所以对我来说奇怪的是,LineItem是null,直到我们到达调用SpecialInstructions = App.SpecialInstructions;的那一行,我以为它会早于那一行被初始化。除此之外,当我尝试运行foreach循环时,它从未进入它,因为它被本地数据库中getter的LineItem.StockNumber部分卡住了。
我想我的问题是为什么LineItem在第一次之后每次都是null?

busg9geu

busg9geu1#

所以出于某种原因,我又加了一句

if (LineItem == null)
{
   IsBusy = false;
   return;
}

就在foreach循环之前,现在它工作正常。我不明白为什么会这样,但它现在每次都在工作。

相关问题