InkForge/app/InkForge.Desktop/AppViewLocator.cs

46 lines
1.4 KiB
C#
Raw Normal View History

2024-05-02 21:44:13 +02:00
using Avalonia;
2024-03-17 22:27:01 +01:00
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).
{
2024-05-02 21:44:13 +02:00
NoteEditDocumentViewModel viewModel => _(new NoteEditDocument(), viewModel),
2024-03-17 22:27:01 +01:00
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
2024-05-02 21:44:13 +02:00
where TView : StyledElement
2024-03-17 22:27:01 +01:00
{
2024-05-02 21:44:13 +02:00
view.DataContext = viewModel;
2024-03-17 22:27:01 +01:00
return view;
}
}
public bool Match(object? data)
{
return data is
2024-05-02 21:44:13 +02:00
NoteEditDocumentViewModel or
2024-03-17 22:27:01 +01:00
RecentItemViewModel or
ViewModels.Tools.WorkspaceTool or
WelcomePageDocumentViewModel or
WorkspaceViewModel;
}
}