45 lines
1.4 KiB
C#
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;
|
|
}
|
|
}
|