.NET MAUI QueryProperty: данные не передаются на другую страницуC#

Место общения программистов C#
Ответить
Anonymous
 .NET MAUI QueryProperty: данные не передаются на другую страницу

Сообщение Anonymous »

Я разрабатываю приложение для рисования с использованием .NET MAUI и Firestore. На домашней странице я показываю список существующих рисунков. Когда я выбираю один из них, я хочу перейти к DrawPage и открыть выбранный рисунок для изменения.
Однако DrawingID, похоже, не передается правильно в DrawPage. На домашней странице я вижу, что DrawingID правильно определен, но при навигации он не достигает DrawPage.
Кроме того, DrawPage также используется для запуска новых рисунков, поэтому он инициализируется, не требуя идентификатора при создании нового рисунка.
Есть идеи, почему DrawingID не передается и как это исправить? Заранее спасибо! (извините, некоторые комментарии написаны на моем языке)
HomePgae.Xam.cs
public partial class HomePage : ContentPage
{
public HomePage(HomeViewModel viewModel)
{
InitializeComponent();
BindingContext = viewModel;

// Betöltjük a rajzokat, amikor az oldal megjelenik
this.Appearing += async (s, e) => await viewModel.LoadUserDrawingsAsync();
}

private async void OnDrawingSelected(object sender, SelectionChangedEventArgs e)
{
if (e.CurrentSelection.FirstOrDefault() is DrawingData selectedDrawing)
{
//Shell.Current.GoToAsync($"DrawPage?drawingId={selectedDrawing.Id}");
await Shell.Current.GoToAsync($"///DrawPage", new Dictionary { { "DrawingId", selectedDrawing.Id } });
((CollectionView)sender).SelectedItem = null;
}
}
}

DrawingPage.Xaml.cs
[QueryProperty(nameof(DrawingId), "DrawingId")]
public partial class DrawPage : ContentPage
{
private readonly DrawableCanvas _drawableCanvas;
private readonly DrawViewModel _viewModel;
public string DrawingId { get; set; }
public DrawPage(DrawViewModel viewModel, FirestoreService firestoreService, FirebaseAuthClient firebaseClient)
{
InitializeComponent();

_drawableCanvas = new DrawableCanvas();
_viewModel = new DrawViewModel(_drawableCanvas, firestoreService, firebaseClient);
BindingContext = _viewModel;

DrawingCanvas.Drawable = _drawableCanvas;

DrawingCanvas.StartInteraction += OnInteractionStart;
DrawingCanvas.DragInteraction += OnInteractionDrag;
}
protected override async void OnAppearing()
{
base.OnAppearing();

if (!string.IsNullOrEmpty(DrawingId))
{
Console.WriteLine($"DrawingId: {DrawingId}"); // Debug
await _viewModel.LoadDrawingAsync(DrawingId);
}
else
{
Console.WriteLine("DrawingId is null or empty!");
}
}

private void OnInteractionStart(object sender, TouchEventArgs e)
{
if (e.Touches.Any())
{
_drawableCanvas.StartNewLine(_viewModel.CurrentColor, _viewModel.LineThickness, _viewModel.Opacity);
var touch = e.Touches.First();
_drawableCanvas.AddPoint(new PointF((float)touch.X, (float)touch.Y));
DrawingCanvas.Invalidate();
}
}

private void OnInteractionDrag(object sender, TouchEventArgs e)
{
if (e.Touches.Any())
{
var touch = e.Touches.First();
_drawableCanvas.AddPoint(new PointF((float)touch.X, (float)touch.Y));
DrawingCanvas.Invalidate();
}
}

DrawingViewModel.cs метод Load:
public async Task LoadDrawingAsync(string drawingId)
{
try
{
var userId = _authClient.User.Uid;
var lines = await _firestoreService.LoadDrawingAsync(userId, drawingId);

if (lines != null)
{
_drawableCanvas.Clear(); // Meglévő rajz törlése
foreach (var line in lines)
{
var points = line.Points.Select(p => new PointF(p["X"], p["Y"])).ToList();
_drawableCanvas.AddLine(points, Color.FromHex(line.Color), line.Thickness, line.Opacity);
}
}
}
catch (Exception ex)
{
await Application.Current.MainPage.DisplayAlert("Hiba", $"Rajz betöltése nem sikerült: {ex.Message}", "OK");
}
}


Метод загрузки FireStoreSrvice.cs
public async Task LoadDrawingAsync(string userId, string drawingId)
{
var drawingDoc = _firestoreDb.Collection("users")
.Document(userId)
.Collection("drawings")
.Document(drawingId);

var snapshot = await drawingDoc.GetSnapshotAsync();

if (!snapshot.Exists) return null;

var lines = snapshot.GetValue("Lines");
return lines;
}


Подробнее здесь: https://stackoverflow.com/questions/792 ... other-page
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»