Avalonia: Problem beim Laden/Anzeigen von Bildbindungen mit Observable & DialogenC#

Ein Treffpunkt für C#-Programmierer
Anonymous
 Avalonia: Problem beim Laden/Anzeigen von Bildbindungen mit Observable & Dialogen

Post by Anonymous »

Ich lerne gerade das Avalonia-Framework und beginne wieder mit der Softwareentwicklung, nachdem ich jahrelang Spiele entwickelt habe.
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.cs
:

Code: 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.cs
:

Code: Select all


















































Muss ich eine Modellklasse erstellen, zum Beispiel ImageViewModel -> Image? Über Feedback wäre ich dankbar.
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!

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post