Я разрабатываю приложение для рисования с использованием .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
.NET MAUI QueryProperty: данные не передаются на другую страницу ⇐ C#
Место общения программистов C#
-
Anonymous
1733054834
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;
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79241514/net-maui-queryproperty-data-not-passed-to-another-page[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия