Авалония: проблема с загрузкой/отображением привязок изображений к наблюдаемым и диалоговым окнам.C#

Место общения программистов C#
Ответить
Anonymous
 Авалония: проблема с загрузкой/отображением привязок изображений к наблюдаемым и диалоговым окнам.

Сообщение Anonymous »

В настоящее время я изучаю инфраструктуру Avalonia и возвращаюсь к разработке программного обеспечения после многих лет разработки игр.
Я пытаюсь создать свои изображения типа ObservableCollection и использую ReactiveUI. Кажется, все работает, кроме заполнения моего . Я пытался разобраться в этом весь вчерашний день и немало времени сегодня, поэтому я пришел на этот форум за помощью!
Вот мой код прямо сейчас:

Код: Выделить всё

MainWindowViewModel.cs:
using Avalonia.Controls;
using Avalonia.Media.Imaging;
using Avalonia.Platform.Storage;
using ReactiveUI;
using System.Collections.ObjectModel;
using System.Diagnostics;
using System.IO;
using System.Reactive;
using System.Threading.Tasks;
using MemoryLane.ImageHelpers;
using System;

namespace MemoryLane.ViewModels
{
public partial class MainWindowViewModel : ReactiveObject
{
// Observable collection of Bitmaps
private ObservableCollection _images = new();

public ObservableCollection Images
{
get => _images;
set => this.RaiseAndSetIfChanged(ref _images, value);
}

// Commands
public ReactiveCommand HomeButtonCommand { get; }
public ReactiveCommand GalleryButtonCommand { get; }
public ReactiveCommand SettingsButtonCommand { get; }
public ReactiveCommand UploadImageCommand { get; }

public MainWindowViewModel()
{
HomeButtonCommand = ReactiveCommand.Create(() => Debug.WriteLine("Home clicked"));
GalleryButtonCommand = ReactiveCommand.Create(() => Debug.WriteLine("Gallery clicked"));
SettingsButtonCommand = ReactiveCommand.Create(() => Debug.WriteLine("Settings clicked"));

UploadImageCommand = ReactiveCommand.CreateFromTask(LoadSelectedImages);
}

// File picker + bitmap loader (memory-safe)
public async Task LoadSelectedImages()
{
var topLevel = Avalonia.Controls.TopLevel.GetTopLevel(App.Current.ApplicationLifetime is Avalonia.Controls.ApplicationLifetimes.ClassicDesktopStyleApplicationLifetime desktop ? desktop.MainWindow : null);

if (topLevel == null) return;

var files = await topLevel.StorageProvider.OpenFilePickerAsync(new FilePickerOpenOptions
{
Title = "Select Images",
AllowMultiple = true,
FileTypeFilter = [FilePickerFileTypes.ImageAll]
});

foreach (var file in files)
{
await using var stream = await file.OpenReadAsync();

try
{
Images.Add(new Bitmap(files[0].Path.LocalPath));
//Images[0] = bitmap; // Trigger UI update
Debug.WriteLine($"Loaded image: {file.Name}");
Debug.WriteLine("Loaded image: " + file.Name);
}
catch (Exception ex)
{
Debug.WriteLine($"Failed to load image {file.Name}: {ex.Message}");
}
}
}
}
}

Код: Выделить всё

MainWindow.cs:


















































Нужно ли мне создавать класс модели, например, ImageViewModel -> Image? Будем признательны за любую обратную связь.
Кажется, все работает, даже когда я нажимаю «Загрузить изображения», выбираю изображения, отладочная распечатка file01, file02, file..., но мой xaml не заполняется и не обновляется, но ошибок нет. Спасибо!

Подробнее здесь: https://stackoverflow.com/questions/798 ... le-dialogs
Ответить

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

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

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

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

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