diff --git a/ObservableCollections.sln b/ObservableCollections.sln
index 2ae2104..470a943 100644
--- a/ObservableCollections.sln
+++ b/ObservableCollections.sln
@@ -23,6 +23,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ObservableCollections.R3",
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ObservableCollections.R3.Tests", "tests\ObservableCollections.R3.Tests\ObservableCollections.R3.Tests.csproj", "{1205F414-EE6D-49C6-9500-3E62E2120EAF}"
EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AvaloniaApp", "sandbox\AvaloniaApp\AvaloniaApp.csproj", "{48D7CA5F-9956-4CF0-908E-1DECA7FE4257}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -57,6 +59,10 @@ Global
{1205F414-EE6D-49C6-9500-3E62E2120EAF}.Debug|Any CPU.Build.0 = Debug|Any CPU
{1205F414-EE6D-49C6-9500-3E62E2120EAF}.Release|Any CPU.ActiveCfg = Release|Any CPU
{1205F414-EE6D-49C6-9500-3E62E2120EAF}.Release|Any CPU.Build.0 = Release|Any CPU
+ {48D7CA5F-9956-4CF0-908E-1DECA7FE4257}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {48D7CA5F-9956-4CF0-908E-1DECA7FE4257}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {48D7CA5F-9956-4CF0-908E-1DECA7FE4257}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {48D7CA5F-9956-4CF0-908E-1DECA7FE4257}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -69,6 +75,7 @@ Global
{B84027E4-9B39-4FB6-B888-C55CE4C79152} = {B6D0425C-7902-4EFB-B0EA-99F164C20835}
{D5950521-C5B3-4B92-834E-3B12CDDD8DD6} = {8F60DC54-F617-4841-8C79-6B0137500D1C}
{1205F414-EE6D-49C6-9500-3E62E2120EAF} = {B6D0425C-7902-4EFB-B0EA-99F164C20835}
+ {48D7CA5F-9956-4CF0-908E-1DECA7FE4257} = {FD836539-75F1-4707-BCFF-751B95DAE19C}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {4156A725-69F4-469F-9BBB-0EE9921CA83E}
diff --git a/sandbox/AvaloniaApp/App.axaml b/sandbox/AvaloniaApp/App.axaml
new file mode 100644
index 0000000..c9f5cd3
--- /dev/null
+++ b/sandbox/AvaloniaApp/App.axaml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/sandbox/AvaloniaApp/App.axaml.cs b/sandbox/AvaloniaApp/App.axaml.cs
new file mode 100644
index 0000000..f00f957
--- /dev/null
+++ b/sandbox/AvaloniaApp/App.axaml.cs
@@ -0,0 +1,24 @@
+using Avalonia;
+using Avalonia.Controls.ApplicationLifetimes;
+using Avalonia.Markup.Xaml;
+
+namespace AvaloniaApp
+{
+ public partial class App : Application
+ {
+ public override void Initialize()
+ {
+ AvaloniaXamlLoader.Load(this);
+ }
+
+ public override void OnFrameworkInitializationCompleted()
+ {
+ if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)
+ {
+ desktop.MainWindow = new MainWindow();
+ }
+
+ base.OnFrameworkInitializationCompleted();
+ }
+ }
+}
\ No newline at end of file
diff --git a/sandbox/AvaloniaApp/AvaloniaApp.csproj b/sandbox/AvaloniaApp/AvaloniaApp.csproj
new file mode 100644
index 0000000..f752079
--- /dev/null
+++ b/sandbox/AvaloniaApp/AvaloniaApp.csproj
@@ -0,0 +1,28 @@
+
+
+ WinExe
+ net8.0
+ enable
+ true
+ app.manifest
+ false
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/sandbox/AvaloniaApp/MainWindow.axaml b/sandbox/AvaloniaApp/MainWindow.axaml
new file mode 100644
index 0000000..cfd3b92
--- /dev/null
+++ b/sandbox/AvaloniaApp/MainWindow.axaml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
diff --git a/sandbox/AvaloniaApp/MainWindow.axaml.cs b/sandbox/AvaloniaApp/MainWindow.axaml.cs
new file mode 100644
index 0000000..50984cb
--- /dev/null
+++ b/sandbox/AvaloniaApp/MainWindow.axaml.cs
@@ -0,0 +1,62 @@
+using Avalonia.Controls;
+using ObservableCollections;
+using R3;
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Collections.Specialized;
+using System.Linq;
+using System.Threading;
+
+namespace AvaloniaApp
+{
+ public partial class MainWindow : Window
+ {
+ public MainWindow()
+ {
+ InitializeComponent();
+
+ this.DataContext = new ViewModel();
+
+ }
+ }
+
+ public class ViewModel
+ {
+ private ObservableList observableList { get; } = new ObservableList();
+ public INotifyCollectionChangedSynchronizedView ItemsView { get; }
+ public ReactiveCommand AddCommand { get; } = new ReactiveCommand();
+ public ReactiveCommand ClearCommand { get; } = new ReactiveCommand();
+
+ public ViewModel()
+ {
+ observableList.Add(1);
+ observableList.Add(2);
+
+ //ItemsView = observableList.CreateView(x => x).ToNotifyCollectionChanged(SynchronizationContextCollectionEventDispatcher.Current);
+
+ ItemsView = observableList.CreateView(x => x).ToNotifyCollectionChanged();
+
+ //var test = ItemsView.ToArray();
+ //INotifyCollectionChangedSynchronizedView
+ // ItemsView = observableList.CreateView(x => x).ToNotifyCollectionChanged();
+
+ // BindingOperations.EnableCollectionSynchronization(ItemsView, new object());
+
+ AddCommand.Subscribe(_ =>
+ {
+ ThreadPool.QueueUserWorkItem(_ =>
+ {
+ observableList.Add(Random.Shared.Next());
+ });
+ });
+
+ // var iii = 10;
+ ClearCommand.Subscribe(_ =>
+ {
+ // observableList.Add(iii++);
+ observableList.Clear();
+ });
+ }
+ }
+}
\ No newline at end of file
diff --git a/sandbox/AvaloniaApp/Program.cs b/sandbox/AvaloniaApp/Program.cs
new file mode 100644
index 0000000..146540a
--- /dev/null
+++ b/sandbox/AvaloniaApp/Program.cs
@@ -0,0 +1,23 @@
+using Avalonia;
+using System;
+
+namespace AvaloniaApp
+{
+ internal class Program
+ {
+ // Initialization code. Don't use any Avalonia, third-party APIs or any
+ // SynchronizationContext-reliant code before AppMain is called: things aren't initialized
+ // yet and stuff might break.
+ [STAThread]
+ public static void Main(string[] args) => BuildAvaloniaApp()
+ .StartWithClassicDesktopLifetime(args);
+
+ // Avalonia configuration, don't remove; also used by visual designer.
+ public static AppBuilder BuildAvaloniaApp()
+ => AppBuilder.Configure()
+ .UsePlatformDetect()
+ .WithInterFont()
+ .LogToTrace()
+ .UseR3();
+ }
+}
diff --git a/sandbox/AvaloniaApp/app.manifest b/sandbox/AvaloniaApp/app.manifest
new file mode 100644
index 0000000..186e529
--- /dev/null
+++ b/sandbox/AvaloniaApp/app.manifest
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+