InkForge/app/InkForge.Desktop/AppViewLocator.cs
2024-05-02 21:44:13 +02:00

45 lines
1.4 KiB
C#

using Avalonia;
using Avalonia.Controls;
using Avalonia.Controls.Templates;
using InkForge.Desktop.ViewModels;
using InkForge.Desktop.ViewModels.Documents;
using InkForge.Desktop.ViewModels.Workspaces;
using InkForge.Desktop.Views.Documents;
using InkForge.Desktop.Views.Workspaces;
namespace InkForge.Desktop;
public class AppViewLocator : IDataTemplate
{
public Control? Build(object? param)
{
#pragma warning disable CS8509 // The switch expression does not handle all possible values of its input type (it is not exhaustive).
return param switch
#pragma warning restore CS8509 // The switch expression does not handle all possible values of its input type (it is not exhaustive).
{
NoteEditDocumentViewModel viewModel => _(new NoteEditDocument(), viewModel),
ViewModels.Tools.WorkspaceTool viewModel => _(new Views.Tools.WorkspaceTool(), viewModel),
WelcomePageDocumentViewModel viewModel => _(new WelcomePageDocument(), viewModel),
WorkspaceViewModel viewModel => _(new WorkspaceView(), viewModel),
};
static TView _<TView, TViewModel>(TView view, TViewModel viewModel)
where TViewModel : class
where TView : StyledElement
{
view.DataContext = viewModel;
return view;
}
}
public bool Match(object? data)
{
return data is
NoteEditDocumentViewModel or
RecentItemViewModel or
ViewModels.Tools.WorkspaceTool or
WelcomePageDocumentViewModel or
WorkspaceViewModel;
}
}