diff --git a/src/Dock.Model.Avalonia/Core/DockWindow.cs b/src/Dock.Model.Avalonia/Core/DockWindow.cs
index 56e0304da..1565a07b6 100644
--- a/src/Dock.Model.Avalonia/Core/DockWindow.cs
+++ b/src/Dock.Model.Avalonia/Core/DockWindow.cs
@@ -13,7 +13,7 @@ namespace Dock.Model.Avalonia.Core;
/// Dock window.
///
[DataContract(IsReference = true)]
-public class DockWindow : StyledElement, IDockWindow
+public class DockWindow : ReactiveBase, IDockWindow
{
///
/// Defines the property.
diff --git a/src/Dock.Model.Avalonia/Core/DockableBase.cs b/src/Dock.Model.Avalonia/Core/DockableBase.cs
index 74ebd58b8..602118e07 100644
--- a/src/Dock.Model.Avalonia/Core/DockableBase.cs
+++ b/src/Dock.Model.Avalonia/Core/DockableBase.cs
@@ -22,7 +22,7 @@ namespace Dock.Model.Avalonia.Core;
[JsonDerivedType(typeof(Tool), typeDiscriminator: "Tool")]
[JsonDerivedType(typeof(ToolDock), typeDiscriminator: "ToolDock")]
[JsonDerivedType(typeof(DockBase), typeDiscriminator: "DockBase")]
-public abstract class DockableBase : StyledElement, IDockable
+public abstract class DockableBase : ReactiveBase, IDockable
{
///
/// Defines the property.
diff --git a/src/Dock.Model.Avalonia/Core/ReactiveBase.cs b/src/Dock.Model.Avalonia/Core/ReactiveBase.cs
new file mode 100644
index 000000000..712572229
--- /dev/null
+++ b/src/Dock.Model.Avalonia/Core/ReactiveBase.cs
@@ -0,0 +1,8 @@
+using Avalonia;
+
+namespace Dock.Model.Avalonia.Core;
+
+///
+/// Reactive base class.
+///
+public abstract class ReactiveBase : StyledElement;
diff --git a/src/Dock.Model.Mvvm/Core/DockWindow.cs b/src/Dock.Model.Mvvm/Core/DockWindow.cs
index a09a69a0b..d7efcc4dc 100644
--- a/src/Dock.Model.Mvvm/Core/DockWindow.cs
+++ b/src/Dock.Model.Mvvm/Core/DockWindow.cs
@@ -1,5 +1,4 @@
using System.Runtime.Serialization;
-using CommunityToolkit.Mvvm.ComponentModel;
using Dock.Model.Adapters;
using Dock.Model.Controls;
using Dock.Model.Core;
@@ -10,7 +9,7 @@ namespace Dock.Model.Mvvm.Core;
/// Dock window.
///
[DataContract(IsReference = true)]
-public class DockWindow : ObservableObject, IDockWindow
+public class DockWindow : ReactiveBase, IDockWindow
{
private readonly IHostAdapter _hostAdapter;
private string _id;
diff --git a/src/Dock.Model.Mvvm/Core/DockableBase.cs b/src/Dock.Model.Mvvm/Core/DockableBase.cs
index afa54d28f..f3987faf5 100644
--- a/src/Dock.Model.Mvvm/Core/DockableBase.cs
+++ b/src/Dock.Model.Mvvm/Core/DockableBase.cs
@@ -1,5 +1,4 @@
using System.Runtime.Serialization;
-using CommunityToolkit.Mvvm.ComponentModel;
using Dock.Model.Adapters;
using Dock.Model.Core;
@@ -9,7 +8,7 @@ namespace Dock.Model.Mvvm.Core;
/// Dockable base class.
///
[DataContract(IsReference = true)]
-public abstract class DockableBase : ObservableObject, IDockable
+public abstract class DockableBase : ReactiveBase, IDockable
{
private readonly TrackingAdapter _trackingAdapter;
private string _id = string.Empty;
diff --git a/src/Dock.Model.Mvvm/Core/ReactiveBase.cs b/src/Dock.Model.Mvvm/Core/ReactiveBase.cs
new file mode 100644
index 000000000..d60d7c86d
--- /dev/null
+++ b/src/Dock.Model.Mvvm/Core/ReactiveBase.cs
@@ -0,0 +1,8 @@
+using CommunityToolkit.Mvvm.ComponentModel;
+
+namespace Dock.Model.Mvvm.Core;
+
+///
+/// Reactive base class.
+///
+public abstract class ReactiveBase : ObservableObject;
diff --git a/src/Dock.Model.ReactiveUI/Controls/DockDock.cs b/src/Dock.Model.ReactiveUI/Controls/DockDock.cs
index c7790d32b..67e1f4646 100644
--- a/src/Dock.Model.ReactiveUI/Controls/DockDock.cs
+++ b/src/Dock.Model.ReactiveUI/Controls/DockDock.cs
@@ -20,6 +20,5 @@ public DockDock()
///
[DataMember(IsRequired = false, EmitDefaultValue = true)]
- [Reactive]
public partial bool LastChildFill { get; set; }
}
diff --git a/src/Dock.Model.ReactiveUI/Controls/DocumentDock.cs b/src/Dock.Model.ReactiveUI/Controls/DocumentDock.cs
index 21cfa8a74..2902334a5 100644
--- a/src/Dock.Model.ReactiveUI/Controls/DocumentDock.cs
+++ b/src/Dock.Model.ReactiveUI/Controls/DocumentDock.cs
@@ -13,7 +13,6 @@ public partial class DocumentDock : DockBase, IDocumentDock
{
///
[DataMember(IsRequired = false, EmitDefaultValue = true)]
- [Reactive]
public partial bool CanCreateDocument { get; set; }
///
diff --git a/src/Dock.Model.ReactiveUI/Controls/ProportionalDock.cs b/src/Dock.Model.ReactiveUI/Controls/ProportionalDock.cs
index c58f79d6b..2d43f1750 100644
--- a/src/Dock.Model.ReactiveUI/Controls/ProportionalDock.cs
+++ b/src/Dock.Model.ReactiveUI/Controls/ProportionalDock.cs
@@ -13,6 +13,5 @@ public partial class ProportionalDock : DockBase, IProportionalDock
{
///
[DataMember(IsRequired = false, EmitDefaultValue = true)]
- [Reactive]
public partial Orientation Orientation { get; set; }
}
diff --git a/src/Dock.Model.ReactiveUI/Controls/RootDock.cs b/src/Dock.Model.ReactiveUI/Controls/RootDock.cs
index 146f512ca..5a87cc70d 100644
--- a/src/Dock.Model.ReactiveUI/Controls/RootDock.cs
+++ b/src/Dock.Model.ReactiveUI/Controls/RootDock.cs
@@ -26,47 +26,38 @@ public RootDock()
///
[DataMember(IsRequired = false, EmitDefaultValue = true)]
- [Reactive]
public partial bool IsFocusableRoot { get; set; }
///
[DataMember(IsRequired = false, EmitDefaultValue = true)]
- [Reactive]
public partial IList? HiddenDockables { get; set; }
///
[DataMember(IsRequired = false, EmitDefaultValue = true)]
- [Reactive]
public partial IList? LeftPinnedDockables { get; set; }
///
[DataMember(IsRequired = false, EmitDefaultValue = true)]
- [Reactive]
public partial IList? RightPinnedDockables { get; set; }
///
[DataMember(IsRequired = false, EmitDefaultValue = true)]
- [Reactive]
public partial IList? TopPinnedDockables { get; set; }
///
[DataMember(IsRequired = false, EmitDefaultValue = true)]
- [Reactive]
public partial IList? BottomPinnedDockables { get; set; }
///
[DataMember(IsRequired = false, EmitDefaultValue = true)]
- [Reactive]
public partial IToolDock? PinnedDock { get; set; }
///
[DataMember(IsRequired = false, EmitDefaultValue = true)]
- [Reactive]
public partial IDockWindow? Window { get; set; }
///
[DataMember(IsRequired = false, EmitDefaultValue = true)]
- [Reactive]
public partial IList? Windows { get; set; }
///
diff --git a/src/Dock.Model.ReactiveUI/Controls/ToolDock.cs b/src/Dock.Model.ReactiveUI/Controls/ToolDock.cs
index 60439564a..966acdd6f 100644
--- a/src/Dock.Model.ReactiveUI/Controls/ToolDock.cs
+++ b/src/Dock.Model.ReactiveUI/Controls/ToolDock.cs
@@ -23,21 +23,17 @@ public ToolDock()
///
[DataMember(IsRequired = false, EmitDefaultValue = true)]
- [Reactive]
public partial Alignment Alignment { get; set; }
///
[DataMember(IsRequired = false, EmitDefaultValue = true)]
- [Reactive]
public partial bool IsExpanded { get; set; }
///
[DataMember(IsRequired = false, EmitDefaultValue = true)]
- [Reactive]
public partial bool AutoHide { get; set; }
///
[DataMember(IsRequired = false, EmitDefaultValue = true)]
- [Reactive]
public partial GripMode GripMode { get; set; }
}
diff --git a/src/Dock.Model.ReactiveUI/Core/DockBase.cs b/src/Dock.Model.ReactiveUI/Core/DockBase.cs
index 7d22cba62..157edf3aa 100644
--- a/src/Dock.Model.ReactiveUI/Core/DockBase.cs
+++ b/src/Dock.Model.ReactiveUI/Core/DockBase.cs
@@ -45,37 +45,30 @@ protected DockBase()
///
[DataMember(IsRequired = false, EmitDefaultValue = true)]
- [Reactive]
public partial IList? VisibleDockables { get; set; }
///
[DataMember(IsRequired = false, EmitDefaultValue = true)]
- [Reactive]
public partial IDockable? ActiveDockable { get; set; }
///
[DataMember(IsRequired = false, EmitDefaultValue = true)]
- [Reactive]
public partial IDockable? DefaultDockable { get; set; }
///
[DataMember(IsRequired = false, EmitDefaultValue = true)]
- [Reactive]
public partial IDockable? FocusedDockable { get; set; }
///
[DataMember(IsRequired = false, EmitDefaultValue = true)]
- [Reactive]
public partial DockMode Dock { get; set; }
///
[DataMember(IsRequired = false, EmitDefaultValue = true)]
- [Reactive]
public partial bool IsActive { get; set; }
///
[DataMember(IsRequired = false, EmitDefaultValue = true)]
- [Reactive]
public partial int OpenedDockablesCount { get; set; }
///
diff --git a/src/Dock.Model.ReactiveUI/Core/DockWindow.cs b/src/Dock.Model.ReactiveUI/Core/DockWindow.cs
index f8c4e230a..44021676d 100644
--- a/src/Dock.Model.ReactiveUI/Core/DockWindow.cs
+++ b/src/Dock.Model.ReactiveUI/Core/DockWindow.cs
@@ -2,7 +2,6 @@
using Dock.Model.Adapters;
using Dock.Model.Controls;
using Dock.Model.Core;
-using ReactiveUI;
namespace Dock.Model.ReactiveUI.Core;
@@ -10,7 +9,7 @@ namespace Dock.Model.ReactiveUI.Core;
/// Dock window.
///
[DataContract(IsReference = true)]
-public partial class DockWindow : ReactiveObject, IDockWindow
+public partial class DockWindow : ReactiveBase, IDockWindow
{
private readonly IHostAdapter _hostAdapter;
@@ -26,57 +25,46 @@ public DockWindow()
///
[DataMember(IsRequired = false, EmitDefaultValue = true)]
- [Reactive]
public partial string Id { get; set; }
///
[DataMember(IsRequired = true, EmitDefaultValue = true)]
- [Reactive]
public partial double X { get; set; }
///
[DataMember(IsRequired = true, EmitDefaultValue = true)]
- [Reactive]
public partial double Y { get; set; }
///
[DataMember(IsRequired = true, EmitDefaultValue = true)]
- [Reactive]
public partial double Width { get; set; }
///
[DataMember(IsRequired = true, EmitDefaultValue = true)]
- [Reactive]
public partial double Height { get; set; }
///
[DataMember(IsRequired = false, EmitDefaultValue = true)]
- [Reactive]
public partial bool Topmost { get; set; }
///
[DataMember(IsRequired = false, EmitDefaultValue = true)]
- [Reactive]
public partial string Title { get; set; }
///
[IgnoreDataMember]
- [Reactive]
public partial IDockable? Owner { get; set; }
///
[IgnoreDataMember]
- [Reactive]
public partial IFactory? Factory { get; set; }
///
[DataMember(IsRequired = false, EmitDefaultValue = true)]
- [Reactive]
public partial IRootDock? Layout { get; set; }
///
[IgnoreDataMember]
- [Reactive]
public partial IHostWindow? Host { get; set; }
///
diff --git a/src/Dock.Model.ReactiveUI/Core/DockableBase.cs b/src/Dock.Model.ReactiveUI/Core/DockableBase.cs
index 5e4d174da..cde8a1111 100644
--- a/src/Dock.Model.ReactiveUI/Core/DockableBase.cs
+++ b/src/Dock.Model.ReactiveUI/Core/DockableBase.cs
@@ -1,7 +1,6 @@
using System.Runtime.Serialization;
using Dock.Model.Adapters;
using Dock.Model.Core;
-using ReactiveUI;
namespace Dock.Model.ReactiveUI.Core;
@@ -9,7 +8,7 @@ namespace Dock.Model.ReactiveUI.Core;
/// Dockable base class.
///
[DataContract(IsReference = true)]
-public abstract partial class DockableBase : ReactiveObject, IDockable
+public abstract partial class DockableBase : ReactiveBase, IDockable
{
private readonly TrackingAdapter _trackingAdapter;
@@ -30,62 +29,50 @@ protected DockableBase()
///
[DataMember(IsRequired = false, EmitDefaultValue = true)]
- [Reactive]
public partial string Id { get; set; }
///
[DataMember(IsRequired = false, EmitDefaultValue = true)]
- [Reactive]
public partial string Title { get; set; }
///
[IgnoreDataMember]
- [Reactive]
public partial object? Context { get; set; }
///
[IgnoreDataMember]
- [Reactive]
public partial IDockable? Owner { get; set; }
///
[IgnoreDataMember]
- [Reactive]
public partial IDockable? OriginalOwner { get; set; }
///
[IgnoreDataMember]
- [Reactive]
public partial IFactory? Factory { get; set; }
///
[DataMember(IsRequired = false, EmitDefaultValue = true)]
- [Reactive]
public partial bool IsEmpty { get; set; }
///
[DataMember(IsRequired = false, EmitDefaultValue = true)]
- [Reactive]
public partial bool IsCollapsable { get; set; }
///
[DataMember(IsRequired = false, EmitDefaultValue = true)]
- [Reactive]
public partial double Proportion { get; set; }
///
[DataMember(IsRequired = false, EmitDefaultValue = true)]
- [Reactive]
public partial bool CanClose { get; set; }
///
[DataMember(IsRequired = false, EmitDefaultValue = true)]
- [Reactive]
public partial bool CanPin { get; set; }
///
[DataMember(IsRequired = false, EmitDefaultValue = true)]
- [Reactive]
public partial bool CanFloat { get; set; }
///
diff --git a/src/Dock.Model.ReactiveUI/Core/ReactiveBase.cs b/src/Dock.Model.ReactiveUI/Core/ReactiveBase.cs
new file mode 100644
index 000000000..4c3f1ecc1
--- /dev/null
+++ b/src/Dock.Model.ReactiveUI/Core/ReactiveBase.cs
@@ -0,0 +1,9 @@
+using ReactiveUI;
+
+namespace Dock.Model.ReactiveUI.Core;
+
+///
+/// Reactive base class.
+///
+[Reactive]
+public abstract class ReactiveBase : ReactiveObject;
diff --git a/src/Dock.Model.ReactiveUI/Dock.Model.ReactiveUI.csproj b/src/Dock.Model.ReactiveUI/Dock.Model.ReactiveUI.csproj
index 244fb09de..3a547a1a8 100644
--- a/src/Dock.Model.ReactiveUI/Dock.Model.ReactiveUI.csproj
+++ b/src/Dock.Model.ReactiveUI/Dock.Model.ReactiveUI.csproj
@@ -28,7 +28,7 @@
-
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive