diff --git a/AvaloniaVisualBasic/App.axaml b/AvaloniaVisualBasic/App.axaml
index 8659b02..3cf851d 100644
--- a/AvaloniaVisualBasic/App.axaml
+++ b/AvaloniaVisualBasic/App.axaml
@@ -1,12 +1,16 @@
+
+
+
@@ -34,6 +38,6 @@
-
+
\ No newline at end of file
diff --git a/AvaloniaVisualBasic/App.axaml.cs b/AvaloniaVisualBasic/App.axaml.cs
index a538423..0692db9 100644
--- a/AvaloniaVisualBasic/App.axaml.cs
+++ b/AvaloniaVisualBasic/App.axaml.cs
@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
+using System.ComponentModel;
using System.Globalization;
using System.Threading.Tasks;
using Avalonia;
@@ -12,6 +13,7 @@
using AvaloniaVisualBasic.VisualDesigner;
using Classic.Avalonia.Theme;
using Classic.CommonControls.Dialogs;
+using CommunityToolkit.Mvvm.ComponentModel;
using R3;
namespace AvaloniaVisualBasic;
@@ -27,9 +29,6 @@ public override void Initialize()
public override void OnFrameworkInitializationCompleted()
{
- var rootViewModel = new DISetup().Root;
- Static.RootViewModel = rootViewModel;
-
if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)
{
// Line below is needed to remove Avalonia data validation.
@@ -39,19 +38,17 @@ public override void OnFrameworkInitializationCompleted()
if (Static.ForceSingleView)
{
Static.SingleView = true;
- Static.MainView = new MainView
- {
- DataContext = rootViewModel
- };
-
- desktop.MainWindow = new ClassicWindow()
+ Static.MainView = new MainView();
+ desktop.MainWindow = new ClassicWindow
{
Content = Static.MainView
};
- rootViewModel.ObservePropertyChanged(x => x.Title)
- .Subscribe(title => desktop.MainWindow.Title = title);
-
+ if (desktop.MainWindow.DataContext is MainViewViewModel rootViewModel)
+ {
+ rootViewModel.ObservePropertyChanged(x => x.Title)
+ .Subscribe(title => desktop.MainWindow.Title = title);
+ }
#if DEBUG
desktop.MainWindow.AttachDevTools();
#endif
@@ -60,10 +57,7 @@ public override void OnFrameworkInitializationCompleted()
}
else
{
- var mainWindow = new MainWindow
- {
- DataContext = rootViewModel
- };
+ var mainWindow = new MainWindow();
desktop.MainWindow = mainWindow;
Static.SingleView = false;
Static.MainView = mainWindow.MainView;
@@ -72,10 +66,7 @@ public override void OnFrameworkInitializationCompleted()
else if (ApplicationLifetime is ISingleViewApplicationLifetime singleViewPlatform)
{
Static.SingleView = true;
- singleViewPlatform.MainView = Static.MainView = new MainView
- {
- DataContext = rootViewModel
- };
+ singleViewPlatform.MainView = Static.MainView = new MainView();
Static.MainView.WindowInitialized();
}
diff --git a/AvaloniaVisualBasic/AvaloniaVisualBasic.csproj b/AvaloniaVisualBasic/AvaloniaVisualBasic.csproj
index 527804b..bdb4fc7 100644
--- a/AvaloniaVisualBasic/AvaloniaVisualBasic.csproj
+++ b/AvaloniaVisualBasic/AvaloniaVisualBasic.csproj
@@ -21,7 +21,7 @@
-
+
all
runtime; build; native; contentfiles; analyzers
diff --git a/AvaloniaVisualBasic/Composition.cs b/AvaloniaVisualBasic/Composition.cs
new file mode 100644
index 0000000..6d94567
--- /dev/null
+++ b/AvaloniaVisualBasic/Composition.cs
@@ -0,0 +1,37 @@
+using Pure.DI;
+using System.Diagnostics;
+using AvaloniaVisualBasic.IDE;
+using AvaloniaVisualBasic.Projects;
+using AvaloniaVisualBasic.Tools;
+using AvaloniaVisualBasic.VisualDesigner;
+using static Pure.DI.Lifetime;
+using static Pure.DI.RootKinds;
+using MdiWindowManager = AvaloniaVisualBasic.IDE.MdiWindowManager;
+
+namespace AvaloniaVisualBasic;
+
+public partial class Composition
+{
+ [Conditional("DI")]
+ static void Setup() =>
+ DI.Setup()
+ .DefaultLifetime(Singleton)
+ .Bind().To()
+ .Bind().To()
+ .Bind().To()
+ .Bind().To()
+ .Bind().To()
+ .Bind().To()
+ .Bind().To()
+ .Bind().To()
+ .Bind().To()
+ .Bind().To()
+ .Bind().To()
+ .Bind().To()
+ .Bind().To()
+ .Bind().To()
+ .Bind().To()
+ .Bind().To()
+ .Bind().To()
+ .Root(nameof(Root), kind: Virtual);
+}
\ No newline at end of file
diff --git a/AvaloniaVisualBasic/Controls/Properties/PropertyBox.axaml b/AvaloniaVisualBasic/Controls/Properties/PropertyBox.axaml
index dc19e7d..b0df92d 100644
--- a/AvaloniaVisualBasic/Controls/Properties/PropertyBox.axaml
+++ b/AvaloniaVisualBasic/Controls/Properties/PropertyBox.axaml
@@ -4,10 +4,11 @@
xmlns:commonControls="clr-namespace:Classic.CommonControls;assembly=Classic.CommonControls.Avalonia"
xmlns:builtinTypes="clr-namespace:AvaloniaVisualBasic.Runtime.BuiltinTypes;assembly=AvaloniaVisualBasic.Runtime"
xmlns:converters="clr-namespace:AvaloniaVisualBasic.Converters"
+ xmlns:avaloniaVisualBasic="clr-namespace:AvaloniaVisualBasic"
x:ClassModifier="internal">
-
+
-
+
diff --git a/AvaloniaVisualBasic/Controls/Properties/PropertyFontBox.cs b/AvaloniaVisualBasic/Controls/Properties/PropertyFontBox.cs
index 7be0040..d70d3af 100644
--- a/AvaloniaVisualBasic/Controls/Properties/PropertyFontBox.cs
+++ b/AvaloniaVisualBasic/Controls/Properties/PropertyFontBox.cs
@@ -4,6 +4,7 @@
using Avalonia.Controls.Primitives;
using Avalonia.Data;
using Avalonia.Interactivity;
+using AvaloniaVisualBasic.IDE;
using AvaloniaVisualBasic.Runtime.BuiltinTypes;
using AvaloniaVisualBasic.Utils;
using Classic.CommonControls.Dialogs;
@@ -14,6 +15,7 @@ public class PropertyFontBox : TemplatedControl
{
public static readonly StyledProperty FontProperty = AvaloniaProperty.Register("Font", defaultBindingMode: BindingMode.TwoWay, defaultValue: VBFont.Default);
public static readonly DirectProperty FontNameProperty = AvaloniaProperty.RegisterDirect("FontName", o => o.FontName);
+ public static readonly StyledProperty WindowManagerProperty = AvaloniaProperty.Register("WindowManager");
public string? FontName
{
@@ -26,6 +28,12 @@ public VBFont Font
set => SetValue(FontProperty, value);
}
+ public WindowManager WindowManager
+ {
+ get => GetValue(WindowManagerProperty);
+ set => SetValue(WindowManagerProperty, value);
+ }
+
protected override void OnApplyTemplate(TemplateAppliedEventArgs e)
{
base.OnApplyTemplate(e);
@@ -37,7 +45,7 @@ private void OnButtonClick(object? sender, RoutedEventArgs e)
{
async Task OpenFontWindow()
{
- var result = await Static.RootViewModel.WindowManager.ShowFontDialog(new FontDialogResult(Font.FontFamily, Font.Style, Font.Weight, Font.Size));
+ var result = await WindowManager.ShowFontDialog(new FontDialogResult(Font.FontFamily, Font.Style, Font.Weight, Font.Size));
if (result != null)
{
SetCurrentValue(FontProperty, new VBFont(result.Family, (int)result.Size, result.Weight, result.Style));
diff --git a/AvaloniaVisualBasic/DISetup.cs b/AvaloniaVisualBasic/DISetup.cs
deleted file mode 100644
index 224390c..0000000
--- a/AvaloniaVisualBasic/DISetup.cs
+++ /dev/null
@@ -1,38 +0,0 @@
-using System;
-using Pure.DI;
-using System.Diagnostics;
-using AvaloniaVisualBasic.IDE;
-using AvaloniaVisualBasic.Projects;
-using AvaloniaVisualBasic.Tools;
-using AvaloniaVisualBasic.VisualDesigner;
-using static Pure.DI.Lifetime;
-using MdiWindowManager = AvaloniaVisualBasic.IDE.MdiWindowManager;
-
-namespace AvaloniaVisualBasic;
-
-public partial class DISetup
-{
- [Conditional("DI")]
- static void Setup() =>
- DI.Setup()
- .Bind().As(Singleton).To()
- .Bind().As(Singleton).To()
- .Bind().As(Singleton).To()
- .Bind().As(Singleton).To()
- .Bind().As(Singleton).To()
- .Bind().As(Singleton).To()
- .Bind().As(Singleton).To()
- .Bind().As(Singleton).To()
- .Bind().As(Singleton).To()
- .Bind().As(Singleton).To()
- .Bind().As(Singleton).To()
- .Bind().As(Singleton).To()
- .Bind().As(Singleton).To()
- .Bind().As(Singleton).To()
- .Bind().As(Singleton).To()
- .Bind().As(Singleton).To()
- .Bind().As(Singleton).To()
- .Root("Root");
-
- public static MainViewViewModel DesignTimeRootViewModel => new DISetup().Root;
-}
\ No newline at end of file
diff --git a/AvaloniaVisualBasic/DesignTimeComposition.cs b/AvaloniaVisualBasic/DesignTimeComposition.cs
new file mode 100644
index 0000000..03958b1
--- /dev/null
+++ b/AvaloniaVisualBasic/DesignTimeComposition.cs
@@ -0,0 +1,10 @@
+using System;
+
+namespace AvaloniaVisualBasic;
+
+public class DesignTimeComposition: Composition
+{
+ private readonly Lazy designTimeRoot = new();
+
+ public override MainViewViewModel Root => designTimeRoot.Value;
+}
\ No newline at end of file
diff --git a/AvaloniaVisualBasic/MainView.axaml b/AvaloniaVisualBasic/MainView.axaml
index a6d8a83..888d095 100644
--- a/AvaloniaVisualBasic/MainView.axaml
+++ b/AvaloniaVisualBasic/MainView.axaml
@@ -10,54 +10,55 @@
xmlns:ide="clr-namespace:AvaloniaVisualBasic.IDE"
xmlns:projects="clr-namespace:AvaloniaVisualBasic.Projects"
mc:Ignorable="d" d:DesignWidth="1080" d:DesignHeight="551"
- x:DataType="vb:MainViewViewModel"
+ DataContext="{StaticResource Composition}"
+ Design.DataContext="{d:DesignInstance vb:Composition}"
+ x:DataType="vb:Composition"
x:Name="RootView"
- Design.DataContext="{x:Static vb:DISetup.DesignTimeRootViewModel}"
x:Class="AvaloniaVisualBasic.MainView">
+ ExecutingCommand="{CompiledBinding Root.NYI}" />
+ ExecutingCommand="{CompiledBinding Root.NewProject}"/>
+ ExecutingCommand="{CompiledBinding Root.AddProject}"/>
+ ExecutingCommand="{CompiledBinding Root.About}" />
+ ExecutingCommand="{CompiledBinding Root.OpenAddInManager}" />
+ ExecutingCommand="{CompiledBinding Root.OpenOptions}" />
+ ExecutingCommand="{CompiledBinding Root.OpenProjectExplorerTool}" />
+ ExecutingCommand="{CompiledBinding Root.OpenPropertiesTool}" />
+ ExecutingCommand="{CompiledBinding Root.OpenFormLayoutTool}" />
+ ExecutingCommand="{CompiledBinding Root.OpenToolBox}" />
+ ExecutingCommand="{CompiledBinding Root.OpenImmediateTool}" />
+ ExecutingCommand="{CompiledBinding Root.OpenLocalsTool}" />
+ ExecutingCommand="{CompiledBinding Root.OpenWatchesTool}" />
+ ExecutingCommand="{CompiledBinding Root.OpenColorPaletteTool}" />
+ ExecutingCommand="{CompiledBinding Root.StartDefaultProjectCommand}" />
+ ExecutingCommand="{CompiledBinding Root.StartDefaultProjectWithFullCompileCommand}" />
+ ExecutingCommand="{CompiledBinding Root.BreakProjectCommand}" />
+ ExecutingCommand="{CompiledBinding Root.EndProjectCommand}" />
+ ExecutingCommand="{CompiledBinding Root.RestartProjectCommand}" />
@@ -65,47 +66,47 @@
ExecutingCommand="{x:Static vb:ApplicationCommands.DisabledCommand}" />
+ ExecutingCommand="{CompiledBinding Root.SaveProject}" />
+ ExecutingCommand="{CompiledBinding Root.SaveProjectAs}" />
+ ExecutingCommand="{CompiledBinding Root.OpenProject}" />
+ ExecutingCommand="{CompiledBinding Root.MakeProjectCommand}" />
+ ExecutingCommand="{CompiledBinding Root.RemoveProjectCommand}" />
+ ExecutingCommand="{CompiledBinding Root.StepInto}" />
+ ExecutingCommand="{CompiledBinding Root.StepOver}" />
+ ExecutingCommand="{CompiledBinding Root.StepOut}" />
+ ExecutingCommand="{CompiledBinding Root.RunToCursor}" />
+ ExecutingCommand="{CompiledBinding Root.AddWatch}" />
+ ExecutingCommand="{CompiledBinding Root.EditWatch}" />
+ ExecutingCommand="{CompiledBinding Root.QuickWatch}" />
+ ExecutingCommand="{CompiledBinding Root.ToggleBreakpoint}" />
+ ExecutingCommand="{CompiledBinding Root.ClearAllBreakpoints}" />
+ ExecutingCommand="{CompiledBinding Root.SetNextStatement}" />
+ ExecutingCommand="{CompiledBinding Root.ShowNextStatement}" />
+ ExecutingCommand="{CompiledBinding Root.ProjectReferencesCommand}" />
+ ExecutingCommand="{CompiledBinding Root.ProjectComponentsCommand}" />
+ ExecutingCommand="{CompiledBinding Root.ProjectPropertiesCommand}" />
@@ -118,20 +119,20 @@
-
+
-
-
+
+
-
+
@@ -190,7 +191,7 @@
@@ -206,12 +207,12 @@
-
+
-
@@ -287,12 +288,12 @@
-
-
-
+
+
+
-
+