Передача данных между страницами Навигация Xamarin Shell

У меня есть приложение форм Xamarin с формой, разделенной на несколько страниц, я хочу передать данные объекта на следующую или предыдущую страницу. Я использую Xamarin Shell. Какой метод или настройку я могу использовать для достижения этой цели?

Варианты, о которых я знаю, и мои предполагаемые проблемы с ними:

  • Строка JSON объекта и передать его в качестве параметра.

Это кажется неверным, так как данные конвертируются туда и обратно.

  • Передайте каждое свойство объекта как отдельный параметр.

Чрезвычайно длинный, со многими свойствами и негибкий для изменения.

  • Сохраните данные в базе данных SQLite.

Я бы не хотел хранить неполную запись в таблице и, используя текущий SQLiteAsyncConnection, я не верю, что могу создать 2 таблицы из одного класса.

🤔 А знаете ли вы, что...
C# обладает сборщиком мусора, который автоматически управляет памятью, что снижает риск утечек памяти.


38
2

Ответы:

К сожалению, сейчас мы могли передавать только простые данные. И эта функция будет добавлена ​​в будущем: https://github.com/xamarin/Xamarin.Forms/issues/6848 Вы можете создать несколько QueryPropertyAttribute для доступа к разным данным: https://docs.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/shell/navigation#pass-data Другой подход заключается в преобразовании объекта в строку JSON, например:

var jsonStr = JsonConvert.SerializeObject(model); Затем передайте его при навигации.


Решено

Да, вы можете передавать данные, используя атрибуты свойства запроса.

Навигационные данные можно получить, украсив принимающий класс атрибутом QueryPropertyAttribute для каждого параметра запроса.

Чтобы узнать больше, проверьте:https://docs.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/shell/navigation#process-navigation-data-using-query-property-attributes .

Кроме того, другой способ — создать глобальную переменную в вашем приложении, и вы можете получить доступ к этой переменной в своем приложении.

Например:

1. создайте класс MyVariables.cs и добавьте статическую переменную для вашей модели (например, MyViewModel ):

public  class MyVariables
{
    public static MyViewModel myViewModel { get; set; } = new MyViewModel { Name = "test1" };
}

MyViewModel.cs

public class MyViewModel
{
    public string Name { get; set; }
}

2. Вы можете изменить или получить доступ к своей переменной в своем приложении:

 // modify the variable
 MyVariables.myViewModel.Name = "test2022";

// access the variable
  System.Diagnostics.Debug.WriteLine("the data is: " + MyVariables.myViewModel.Name);