У меня есть приложение форм Xamarin с формой, разделенной на несколько страниц, я хочу передать данные объекта на следующую или предыдущую страницу. Я использую Xamarin Shell. Какой метод или настройку я могу использовать для достижения этой цели?
Варианты, о которых я знаю, и мои предполагаемые проблемы с ними:
Это кажется неверным, так как данные конвертируются туда и обратно.
Чрезвычайно длинный, со многими свойствами и негибкий для изменения.
Я бы не хотел хранить неполную запись в таблице и, используя текущий SQLiteAsyncConnection, я не верю, что могу создать 2 таблицы из одного класса.
🤔 А знаете ли вы, что...
C# обладает сборщиком мусора, который автоматически управляет памятью, что снижает риск утечек памяти.
К сожалению, сейчас мы могли передавать только простые данные. И эта функция будет добавлена в будущем: 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);