Ich versuche, meine Bilder zu erstellen, die vom Typ ObservableCollection sind, und ich verwende die ReactiveUI. Alles scheint zu funktionieren, außer dass es meinen füllt. Ich habe gestern den ganzen Tag und heute viel Zeit damit verbracht, das herauszufinden, deshalb komme ich in dieses Forum, um Hilfe zu erhalten!
Hier ist mein Code im Moment:
Code: Select all
MainWindowViewModel.csCode: Select all
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}");
}
}
}
}
}
Code: Select all
MainWindow.csCode: Select all
Alles scheint zu funktionieren, auch wenn ich auf „Bilder hochladen“ klicke, Bilder auswähle, das Debuggen Datei01, Datei02, Datei ausgibt..., aber mein XAML wird nicht gefüllt oder aktualisiert, aber es treten keine Fehler auf. Danke!
Mobile version