I’m currently trying to learn Avalonia by following the music store app tutorial;
I’m currently stuck at this step : https://docs.avaloniaui.net/docs/tutorials/music-store-app/opening-a-dialog
For some reason, the window doesn’t seem to open when I click on the button.
I first noticed that my Avalonia packages were not up to date, so I updated it hoping it would solve the issue, but it doesn’t seem to have any effect.
I added a debug line to write in the console when I click the button, to be sure the event was triggered, and it does indeed seem to trigger. However, still no new window poping up.
Here is my code so far :
MainWindowViewModel.cs :
using System;
using System.Windows.Input;
using ReactiveUI;
namespace Avalonia.MusicStore.ViewModels;
public class MainWindowViewModel : ViewModelBase
{
public MainWindowViewModel()
{
ShowDialog = new Interaction<MusicStoreViewModel, AlbumViewModel?>();
BuyMusicCommand = ReactiveCommand.Create((() =>
{
Console.WriteLine("Open dialog");
MusicStoreViewModel store = new MusicStoreViewModel();
IObservable<AlbumViewModel?> result = ShowDialog.Handle(store);
}));
}
public ICommand BuyMusicCommand { get; }
public Interaction<MusicStoreViewModel, AlbumViewModel?> ShowDialog { get; }
}
MainWindow.axaml :
<Window xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vm="using:Avalonia.MusicStore.ViewModels"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
x:Class="Avalonia.MusicStore.Views.MainWindow"
x:DataType="vm:MainWindowViewModel"
Icon="/Assets/avalonia-logo.ico"
Title="Avalonia.MusicStore"
TransparencyLevelHint="AcrylicBlur"
Background="Transparent"
ExtendClientAreaToDecorationsHint="True"
WindowStartupLocation="CenterScreen">
<Panel>
<ExperimentalAcrylicBorder IsHitTestVisible="False">
<ExperimentalAcrylicBorder.Material>
<ExperimentalAcrylicMaterial
BackgroundSource="Digger"
TintColor="Black"
TintOpacity="1"
MaterialOpacity="0.65" />
</ExperimentalAcrylicBorder.Material>
</ExperimentalAcrylicBorder>
<Panel Margin="40">
<Button HorizontalAlignment="Right"
VerticalAlignment="Top"
Command="{Binding BuyMusicCommand}">
<PathIcon Data="{StaticResource store_microsoft_regular}"/>
</Button>
</Panel>
</Panel>
</Window>
MainWindow.axaml.cs :
using System.Threading.Tasks;
using Avalonia.MusicStore.ViewModels;
using Avalonia.ReactiveUI;
using ReactiveUI;
namespace Avalonia.MusicStore.Views;
public partial class MainWindow : ReactiveWindow<MainWindowViewModel>
{
public MainWindow()
{
InitializeComponent();
this.WhenActivated(action => action(ViewModel!.ShowDialog.RegisterHandler(DoShowDialogAsync)));
}
private async Task DoShowDialogAsync(IInteractionContext<MusicStoreViewModel, AlbumViewModel?> interaction)
{
MusicStoreWindow dialog = new MusicStoreWindow();
dialog.DataContext = interaction.Input;
AlbumViewModel? result = await dialog.ShowDialog<AlbumViewModel?>(this);
interaction.SetOutput(result);
}
}
I feel like I may have missed a step or something, but I can’t figure out where.
Bryan Devulder is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.