📄 src/App/ViewLocator.cs
using System;
using Avalonia.Controls;
using Avalonia.Controls.Templates;
using Microsoft.Extensions.DependencyInjection;
using MMirror.App.ViewModels;
using MMirror.App.Views;

namespace MMirror.App;

/// <summary>
/// Given a view model, returns the corresponding view if possible.
/// </summary>
public class ViewLocator(IServiceProvider services) : IDataTemplate
{
    public Control Build(object? data) =>
        data switch
        {
            MainViewModel => services.GetRequiredService<MainView>(),
            _ => new TextBlock { Text = $"No view for {data?.GetType().Name}" },
        };

    public bool Match(object? data) => data is ViewModelBase;
}