فهرست منبع

Move current contents of Avalonia.Markup to Avalonia.Base. Move Avalonia.Markup.Xaml.Data/Parser classes to Avalonia.Markup since they're not Xaml-specific.

Use pattern-matching switch.

Fix bug from cleanup.
Jeremy Koritzinsky 7 سال پیش
والد
کامیت
cf8244b37a
100فایلهای تغییر یافته به همراه174 افزوده شده و 158 حذف شده
  1. 2 0
      Avalonia.sln
  2. 8 0
      build/Binding.props
  3. 2 1
      samples/ControlCatalog/Pages/AutoCompleteBoxPage.xaml.cs
  4. 5 2
      src/Android/Avalonia.Android/Resources/Resource.Designer.cs
  5. 1 0
      src/Avalonia.Base/Avalonia.Base.csproj
  6. 3 2
      src/Avalonia.Base/Collections/AvaloniaDictionary.cs
  7. 1 2
      src/Avalonia.Base/Data/BindingNotification.cs
  8. 1 1
      src/Avalonia.Base/Data/Converters/AlwaysEnabledDelegateCommand.cs
  9. 1 1
      src/Avalonia.Base/Data/Converters/BoolConverters.cs
  10. 1 1
      src/Avalonia.Base/Data/Converters/DefaultValueConverter.cs
  11. 1 1
      src/Avalonia.Base/Data/Converters/FuncMultiValueConverter.cs
  12. 1 1
      src/Avalonia.Base/Data/Converters/FuncValueConverter.cs
  13. 1 1
      src/Avalonia.Base/Data/Converters/IMultiValueConverter.cs
  14. 1 1
      src/Avalonia.Base/Data/Converters/IValueConverter.cs
  15. 1 1
      src/Avalonia.Base/Data/Converters/StringConverters.cs
  16. 2 2
      src/Avalonia.Base/Data/Core/BindingExpression.cs
  17. 1 1
      src/Avalonia.Base/Data/Core/CommonPropertyNames.cs
  18. 1 1
      src/Avalonia.Base/Data/Core/EmptyExpressionNode.cs
  19. 1 1
      src/Avalonia.Base/Data/Core/ExpressionNode.cs
  20. 2 2
      src/Avalonia.Base/Data/Core/ExpressionNodeBuilder.cs
  21. 20 25
      src/Avalonia.Base/Data/Core/ExpressionObserver.cs
  22. 2 2
      src/Avalonia.Base/Data/Core/ExpressionParseException.cs
  23. 1 1
      src/Avalonia.Base/Data/Core/ISettableNode.cs
  24. 1 1
      src/Avalonia.Base/Data/Core/ITransformNode.cs
  25. 1 1
      src/Avalonia.Base/Data/Core/IndexerNode.cs
  26. 1 1
      src/Avalonia.Base/Data/Core/LogicalNotNode.cs
  27. 1 2
      src/Avalonia.Base/Data/Core/MarkupBindingChainException.cs
  28. 1 1
      src/Avalonia.Base/Data/Core/Parsers/ArgumentListParser.cs
  29. 1 1
      src/Avalonia.Base/Data/Core/Parsers/ExpressionParser.cs
  30. 1 1
      src/Avalonia.Base/Data/Core/Parsers/IdentifierParser.cs
  31. 1 1
      src/Avalonia.Base/Data/Core/Parsers/Reader.cs
  32. 1 1
      src/Avalonia.Base/Data/Core/Plugins/AvaloniaPropertyAccessorPlugin.cs
  33. 1 1
      src/Avalonia.Base/Data/Core/Plugins/DataAnnotationsValidationPlugin.cs
  34. 1 1
      src/Avalonia.Base/Data/Core/Plugins/DataValidatiorBase.cs
  35. 1 1
      src/Avalonia.Base/Data/Core/Plugins/ExceptionValidationPlugin.cs
  36. 1 1
      src/Avalonia.Base/Data/Core/Plugins/IDataValidationPlugin.cs
  37. 1 1
      src/Avalonia.Base/Data/Core/Plugins/IPropertyAccessor.cs
  38. 1 1
      src/Avalonia.Base/Data/Core/Plugins/IPropertyAccessorPlugin.cs
  39. 1 1
      src/Avalonia.Base/Data/Core/Plugins/IStreamPlugin.cs
  40. 1 1
      src/Avalonia.Base/Data/Core/Plugins/IndeiValidationPlugin.cs
  41. 1 1
      src/Avalonia.Base/Data/Core/Plugins/InpcPropertyAccessorPlugin.cs
  42. 1 1
      src/Avalonia.Base/Data/Core/Plugins/MethodAccessorPlugin.cs
  43. 1 1
      src/Avalonia.Base/Data/Core/Plugins/ObservableStreamPlugin.cs
  44. 1 1
      src/Avalonia.Base/Data/Core/Plugins/PropertyAccessorBase.cs
  45. 1 1
      src/Avalonia.Base/Data/Core/Plugins/PropertyError.cs
  46. 1 1
      src/Avalonia.Base/Data/Core/Plugins/TaskStreamPlugin.cs
  47. 2 2
      src/Avalonia.Base/Data/Core/PropertyAccessorNode.cs
  48. 1 1
      src/Avalonia.Base/Data/Core/StreamNode.cs
  49. 2 1
      src/Avalonia.Base/Properties/AssemblyInfo.cs
  50. 3 3
      src/Markup/Avalonia.Markup.Xaml/Avalonia.Markup.Xaml.csproj
  51. 1 1
      src/Markup/Avalonia.Markup.Xaml/AvaloniaXamlLoader.cs
  52. 1 1
      src/Markup/Avalonia.Markup.Xaml/Converters/AvaloniaPropertyTypeConverter.cs
  53. 2 2
      src/Markup/Avalonia.Markup.Xaml/Converters/SelectorTypeConverter.cs
  54. 2 1
      src/Markup/Avalonia.Markup.Xaml/MarkupExtensions/BindingExtension.cs
  55. 1 1
      src/Markup/Avalonia.Markup.Xaml/MarkupExtensions/RelativeSourceExtension.cs
  56. 1 1
      src/Markup/Avalonia.Markup.Xaml/MarkupExtensions/ResourceInclude.cs
  57. 1 1
      src/Markup/Avalonia.Markup.Xaml/MarkupExtensions/StaticResourceExtension.cs
  58. 3 2
      src/Markup/Avalonia.Markup.Xaml/MarkupExtensions/TemplateBindingExtension.cs
  59. 2 1
      src/Markup/Avalonia.Markup.Xaml/PortableXaml/AvaloniaRuntimeTypeProvider.cs
  60. 1 1
      src/Markup/Avalonia.Markup.Xaml/PortableXaml/AvaloniaXamlSchemaContext.cs
  61. 1 1
      src/Markup/Avalonia.Markup.Xaml/PortableXaml/AvaloniaXamlType.cs
  62. 0 2
      src/Markup/Avalonia.Markup.Xaml/Properties/AssemblyInfo.cs
  63. 1 1
      src/Markup/Avalonia.Markup.Xaml/Templates/MemberSelector.cs
  64. 1 6
      src/Markup/Avalonia.Markup.Xaml/Templates/TreeDataTemplate.cs
  65. 5 1
      src/Markup/Avalonia.Markup/Avalonia.Markup.csproj
  66. 4 3
      src/Markup/Avalonia.Markup/Data/Binding.cs
  67. 1 1
      src/Markup/Avalonia.Markup/Data/DelayedBinding.cs
  68. 2 1
      src/Markup/Avalonia.Markup/Data/MultiBinding.cs
  69. 2 1
      src/Markup/Avalonia.Markup/Data/RelativeSource.cs
  70. 1 1
      src/Markup/Avalonia.Markup/Parsers/SelectorGrammar.cs
  71. 1 1
      src/Markup/Avalonia.Markup/Parsers/SelectorParser.cs
  72. 1 1
      src/Markup/Avalonia.Markup/Properties/AssemblyInfo.cs
  73. 1 1
      tests/Avalonia.Base.UnitTests/AvaloniaObjectTests_Binding.cs
  74. 1 1
      tests/Avalonia.Base.UnitTests/AvaloniaObjectTests_Direct.cs
  75. 2 1
      tests/Avalonia.Base.UnitTests/Collections/AvaloniaDictionaryTests.cs
  76. 3 2
      tests/Avalonia.Base.UnitTests/Data/Core/BindingExpressionTests.cs
  77. 2 2
      tests/Avalonia.Base.UnitTests/Data/Core/ExpressionNodeBuilderTests.cs
  78. 2 2
      tests/Avalonia.Base.UnitTests/Data/Core/ExpressionNodeBuilderTests_Errors.cs
  79. 2 2
      tests/Avalonia.Base.UnitTests/Data/Core/ExpressionObserverTests_AttachedProperty.cs
  80. 2 2
      tests/Avalonia.Base.UnitTests/Data/Core/ExpressionObserverTests_AvaloniaProperty.cs
  81. 2 2
      tests/Avalonia.Base.UnitTests/Data/Core/ExpressionObserverTests_DataValidation.cs
  82. 2 2
      tests/Avalonia.Base.UnitTests/Data/Core/ExpressionObserverTests_Indexer.cs
  83. 2 2
      tests/Avalonia.Base.UnitTests/Data/Core/ExpressionObserverTests_Lifetime.cs
  84. 2 2
      tests/Avalonia.Base.UnitTests/Data/Core/ExpressionObserverTests_Method.cs
  85. 2 2
      tests/Avalonia.Base.UnitTests/Data/Core/ExpressionObserverTests_Negation.cs
  86. 2 2
      tests/Avalonia.Base.UnitTests/Data/Core/ExpressionObserverTests_Observable.cs
  87. 3 3
      tests/Avalonia.Base.UnitTests/Data/Core/ExpressionObserverTests_Property.cs
  88. 2 2
      tests/Avalonia.Base.UnitTests/Data/Core/ExpressionObserverTests_SetValue.cs
  89. 2 2
      tests/Avalonia.Base.UnitTests/Data/Core/ExpressionObserverTests_Task.cs
  90. 1 1
      tests/Avalonia.Base.UnitTests/Data/Core/IndeiBase.cs
  91. 1 1
      tests/Avalonia.Base.UnitTests/Data/Core/Plugins/DataAnnotationsValidationPluginTests.cs
  92. 2 2
      tests/Avalonia.Base.UnitTests/Data/Core/Plugins/ExceptionValidationPluginTests.cs
  93. 2 2
      tests/Avalonia.Base.UnitTests/Data/Core/Plugins/IndeiValidationPluginTests.cs
  94. 2 1
      tests/Avalonia.Base.UnitTests/Data/DefaultValueConverterTests.cs
  95. 1 1
      tests/Avalonia.Base.UnitTests/Data/UnitTestSynchronizationContext.cs
  96. 1 1
      tests/Avalonia.Controls.UnitTests/AutoCompleteBoxTests.cs
  97. 1 1
      tests/Avalonia.Controls.UnitTests/ButtonTests.cs
  98. 1 1
      tests/Avalonia.Controls.UnitTests/ContentControlTests.cs
  99. 1 1
      tests/Avalonia.Controls.UnitTests/DatePickerTests.cs
  100. 1 1
      tests/Avalonia.Controls.UnitTests/ListBoxTests_Single.cs

+ 2 - 0
Avalonia.sln

@@ -138,6 +138,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Build", "Build", "{74487168
 EndProject
 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Props", "Props", "{F3AC8BC1-27F5-4255-9AFC-04ABFD11683A}"
 	ProjectSection(SolutionItems) = preProject
+		build\Base.props = build\Base.props
+		build\Binding.props = build\Binding.props
 		build\JetBrains.Annotations.props = build\JetBrains.Annotations.props
 		build\JetBrains.dotMemoryUnit.props = build\JetBrains.dotMemoryUnit.props
 		build\Magick.NET-Q16-AnyCPU.props = build\Magick.NET-Q16-AnyCPU.props

+ 8 - 0
build/Binding.props

@@ -0,0 +1,8 @@
+<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <PackageReference Include="System.ComponentModel.Annotations" Version="4.3.0" />
+    <PackageReference Include="System.ComponentModel.TypeConverter" Version="4.3.0" />
+    <PackageReference Include="System.ComponentModel.Primitives" Version="4.3.0" />
+    <PackageReference Include="System.Runtime.Serialization.Primitives" Version="4.3.0" />
+  </ItemGroup>
+</Project>

+ 2 - 1
samples/ControlCatalog/Pages/AutoCompleteBoxPage.xaml.cs

@@ -2,12 +2,13 @@ using Avalonia.Controls;
 using Avalonia.LogicalTree;
 using Avalonia.Markup;
 using Avalonia.Markup.Xaml;
-using Avalonia.Markup.Xaml.Data;
+using Avalonia.Markup.Data;
 using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Threading;
 using System.Threading.Tasks;
+using Avalonia.Data.Converters;
 
 namespace ControlCatalog.Pages
 {

+ 5 - 2
src/Android/Avalonia.Android/Resources/Resource.Designer.cs

@@ -40,11 +40,14 @@ namespace Avalonia.Android
 		public partial class String
 		{
 			
+			// aapt resource value: 0x7f020002
+			public static int ApplicationName = 2130837506;
+			
 			// aapt resource value: 0x7f020001
-			public static int ApplicationName = 2130837505;
+			public static int Hello = 2130837505;
 			
 			// aapt resource value: 0x7f020000
-			public static int Hello = 2130837504;
+			public static int library_name = 2130837504;
 			
 			static String()
 			{

+ 1 - 0
src/Avalonia.Base/Avalonia.Base.csproj

@@ -5,6 +5,7 @@
     <RootNamespace>Avalonia</RootNamespace>
   </PropertyGroup>
   <Import Project="..\..\build\Base.props" />
+  <Import Project="..\..\build\Binding.props" />
   <Import Project="..\..\build\Rx.props" />
   <Import Project="..\..\build\JetBrains.Annotations.props" />
 </Project>

+ 3 - 2
src/Avalonia.Base/Collections/AvaloniaDictionary.cs

@@ -7,6 +7,7 @@ using System.Collections.Generic;
 using System.Collections.Specialized;
 using System.ComponentModel;
 using System.Linq;
+using Avalonia.Data.Core;
 
 namespace Avalonia.Collections
 {
@@ -116,8 +117,8 @@ namespace Avalonia.Collections
 
             _inner = new Dictionary<TKey, TValue>();
 
-            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("Count"));
-            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("Item[]"));
+            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(Count)));
+            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(CommonPropertyNames.IndexerName));
             
 
             if (CollectionChanged != null)

+ 1 - 2
src/Avalonia.Base/Data/BindingNotification.cs

@@ -171,8 +171,7 @@ namespace Avalonia.Data
         /// </remarks>
         public static object ExtractError(object o)
         {
-            var notification = o as BindingNotification;
-            return notification != null ? notification.Error : o;
+            return o is BindingNotification notification ? notification.Error : o;
         }
 
         /// <summary>

+ 1 - 1
src/Markup/Avalonia.Markup/AlwaysEnabledDelegateCommand.cs → src/Avalonia.Base/Data/Converters/AlwaysEnabledDelegateCommand.cs

@@ -6,7 +6,7 @@ using System.Reflection;
 using System.Text;
 using System.Windows.Input;
 
-namespace Avalonia.Markup
+namespace Avalonia.Data.Converters
 {
     class AlwaysEnabledDelegateCommand : ICommand
     {

+ 1 - 1
src/Markup/Avalonia.Markup/BoolConverters.cs → src/Avalonia.Base/Data/Converters/BoolConverters.cs

@@ -3,7 +3,7 @@
 
 using System.Linq;
 
-namespace Avalonia.Markup
+namespace Avalonia.Data.Converters
 {
     /// <summary>
     /// Provides a set of useful <see cref="IValueConverter"/>s for working with string values.

+ 1 - 1
src/Markup/Avalonia.Markup/DefaultValueConverter.cs → src/Avalonia.Base/Data/Converters/DefaultValueConverter.cs

@@ -7,7 +7,7 @@ using Avalonia.Data;
 using Avalonia.Utilities;
 using System.Windows.Input;
 
-namespace Avalonia.Markup
+namespace Avalonia.Data.Converters
 {
     /// <summary>
     /// Provides a default set of value conversions for bindings that do not specify a value

+ 1 - 1
src/Markup/Avalonia.Markup/FuncMultiValueConverter.cs → src/Avalonia.Base/Data/Converters/FuncMultiValueConverter.cs

@@ -6,7 +6,7 @@ using System.Collections.Generic;
 using System.Globalization;
 using System.Linq;
 
-namespace Avalonia.Markup
+namespace Avalonia.Data.Converters
 {
     /// <summary>
     /// A general purpose <see cref="IValueConverter"/> that uses a <see cref="Func{T1, TResult}"/>

+ 1 - 1
src/Markup/Avalonia.Markup/FuncValueConverter.cs → src/Avalonia.Base/Data/Converters/FuncValueConverter.cs

@@ -5,7 +5,7 @@ using System;
 using System.Globalization;
 using Avalonia.Utilities;
 
-namespace Avalonia.Markup
+namespace Avalonia.Data.Converters
 {
     /// <summary>
     /// A general purpose <see cref="IValueConverter"/> that uses a <see cref="Func{T1, TResult}"/>

+ 1 - 1
src/Markup/Avalonia.Markup/IMultiValueConverter.cs → src/Avalonia.Base/Data/Converters/IMultiValueConverter.cs

@@ -5,7 +5,7 @@ using System;
 using System.Collections.Generic;
 using System.Globalization;
 
-namespace Avalonia.Markup
+namespace Avalonia.Data.Converters
 {
     /// <summary>
     /// Converts multi-binding inputs to a final value.

+ 1 - 1
src/Markup/Avalonia.Markup/IValueConverter.cs → src/Avalonia.Base/Data/Converters/IValueConverter.cs

@@ -5,7 +5,7 @@ using System;
 using System.Globalization;
 using Avalonia.Data;
 
-namespace Avalonia.Markup
+namespace Avalonia.Data.Converters
 {
     /// <summary>
     /// Converts a binding value.

+ 1 - 1
src/Markup/Avalonia.Markup/StringConverters.cs → src/Avalonia.Base/Data/Converters/StringConverters.cs

@@ -5,7 +5,7 @@ using System;
 using System.Globalization;
 using Avalonia.Utilities;
 
-namespace Avalonia.Markup
+namespace Avalonia.Data.Converters
 {
     /// <summary>
     /// Provides a set of useful <see cref="IValueConverter"/>s for working with string values.

+ 2 - 2
src/Markup/Avalonia.Markup/Data/BindingExpression.cs → src/Avalonia.Base/Data/Core/BindingExpression.cs

@@ -5,11 +5,11 @@ using System;
 using System.Globalization;
 using System.Reactive.Linq;
 using System.Reactive.Subjects;
-using Avalonia.Data;
+using Avalonia.Data.Converters;
 using Avalonia.Logging;
 using Avalonia.Utilities;
 
-namespace Avalonia.Markup.Data
+namespace Avalonia.Data.Core
 {
     /// <summary>
     /// Binds to an expression on an object using a type value converter to convert the values

+ 1 - 1
src/Markup/Avalonia.Markup/Data/CommonPropertyNames.cs → src/Avalonia.Base/Data/Core/CommonPropertyNames.cs

@@ -1,7 +1,7 @@
 // Copyright (c) The Avalonia Project. All rights reserved.
 // Licensed under the MIT license. See licence.md file in the project root for full license information.
 
-namespace Avalonia.Markup.Data
+namespace Avalonia.Data.Core
 {
     public static class CommonPropertyNames
     {

+ 1 - 1
src/Markup/Avalonia.Markup/Data/EmptyExpressionNode.cs → src/Avalonia.Base/Data/Core/EmptyExpressionNode.cs

@@ -4,7 +4,7 @@
 using System;
 using System.Reactive.Linq;
 
-namespace Avalonia.Markup.Data
+namespace Avalonia.Data.Core
 {
     internal class EmptyExpressionNode : ExpressionNode
     {

+ 1 - 1
src/Markup/Avalonia.Markup/Data/ExpressionNode.cs → src/Avalonia.Base/Data/Core/ExpressionNode.cs

@@ -7,7 +7,7 @@ using System.Reactive.Linq;
 using System.Reactive.Subjects;
 using Avalonia.Data;
 
-namespace Avalonia.Markup.Data
+namespace Avalonia.Data.Core
 {
     internal abstract class ExpressionNode : ISubject<object>
     {

+ 2 - 2
src/Markup/Avalonia.Markup/Data/ExpressionNodeBuilder.cs → src/Avalonia.Base/Data/Core/ExpressionNodeBuilder.cs

@@ -2,9 +2,9 @@
 // Licensed under the MIT license. See licence.md file in the project root for full license information.
 
 using System;
-using Avalonia.Markup.Data.Parsers;
+using Avalonia.Data.Core.Parsers;
 
-namespace Avalonia.Markup.Data
+namespace Avalonia.Data.Core
 {
     internal static class ExpressionNodeBuilder
     {

+ 20 - 25
src/Markup/Avalonia.Markup/Data/ExpressionObserver.cs → src/Avalonia.Base/Data/Core/ExpressionObserver.cs

@@ -8,9 +8,9 @@ using System.Reactive.Disposables;
 using System.Reactive.Linq;
 using System.Reactive.Subjects;
 using Avalonia.Data;
-using Avalonia.Markup.Data.Plugins;
+using Avalonia.Data.Core.Plugins;
 
-namespace Avalonia.Markup.Data
+namespace Avalonia.Data.Core
 {
     /// <summary>
     /// Observes and sets the value of an expression on an object.
@@ -245,40 +245,35 @@ namespace Avalonia.Markup.Data
 
         private object Translate(object o)
         {
-            var weak = o as WeakReference;
-
-            if (weak != null)
+            if (o is WeakReference weak)
             {
                 return weak.Target;
             }
-            else
+            else if (BindingNotification.ExtractError(o) is MarkupBindingChainException broken)
             {
-                var broken = BindingNotification.ExtractError(o) as MarkupBindingChainException;
-
-                if (broken != null)
-                {
-                    broken.Commit(Description);
-                }
-                return o;
+                broken.Commit(Description);
             }
+
+            return o;
         }
 
         private IDisposable StartRoot()
         {
-            var observable = _root as IObservable<object>;
-
-            if (observable != null)
+            switch (_root)
             {
-                return observable.Subscribe(
-                    x => _node.Target = new WeakReference(x != AvaloniaProperty.UnsetValue ? x : null),
-                    _ => _finished.OnNext(Unit.Default),
-                    () => _finished.OnNext(Unit.Default));
-            }
-            else
-            {
-                _node.Target = (WeakReference)_root;
-                return Disposable.Empty;
+                case IObservable<object> observable:
+                    return observable.Subscribe(
+                        x => _node.Target = new WeakReference(x != AvaloniaProperty.UnsetValue ? x : null),
+                        _ => _finished.OnNext(Unit.Default),
+                        () => _finished.OnNext(Unit.Default));
+                case WeakReference weak:
+                    _node.Target = weak;
+                    break;
+                default:
+                    throw new AvaloniaInternalException("The ExpressionObserver._root member should only be either an observable or WeakReference.");
             }
+
+            return Disposable.Empty;
         }
     }
 }

+ 2 - 2
src/Markup/Avalonia.Markup/Data/ExpressionParseException.cs → src/Avalonia.Base/Data/Core/ExpressionParseException.cs

@@ -2,9 +2,9 @@
 // Licensed under the MIT license. See licence.md file in the project root for full license information.
 
 using System;
-using Avalonia.Markup.Data.Parsers;
+using Avalonia.Data.Core.Parsers;
 
-namespace Avalonia.Markup.Data
+namespace Avalonia.Data.Core
 {
     /// <summary>
     /// Exception thrown when <see cref="ExpressionObserver"/> could not parse the provided

+ 1 - 1
src/Markup/Avalonia.Markup/Data/ISettableNode.cs → src/Avalonia.Base/Data/Core/ISettableNode.cs

@@ -5,7 +5,7 @@ using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
 
-namespace Avalonia.Markup.Data
+namespace Avalonia.Data.Core
 {
     interface ISettableNode
     {

+ 1 - 1
src/Markup/Avalonia.Markup/Data/ITransformNode.cs → src/Avalonia.Base/Data/Core/ITransformNode.cs

@@ -2,7 +2,7 @@
 using System.Collections.Generic;
 using System.Text;
 
-namespace Avalonia.Markup.Data
+namespace Avalonia.Data.Core
 {
     interface ITransformNode
     {

+ 1 - 1
src/Markup/Avalonia.Markup/Data/IndexerNode.cs → src/Avalonia.Base/Data/Core/IndexerNode.cs

@@ -13,7 +13,7 @@ using System.Reflection;
 using System.Reactive.Linq;
 using Avalonia.Data;
 
-namespace Avalonia.Markup.Data
+namespace Avalonia.Data.Core
 {
     internal class IndexerNode : ExpressionNode, ISettableNode
     {

+ 1 - 1
src/Markup/Avalonia.Markup/Data/LogicalNotNode.cs → src/Avalonia.Base/Data/Core/LogicalNotNode.cs

@@ -5,7 +5,7 @@ using System;
 using System.Globalization;
 using Avalonia.Data;
 
-namespace Avalonia.Markup.Data
+namespace Avalonia.Data.Core
 {
     internal class LogicalNotNode : ExpressionNode, ITransformNode
     {

+ 1 - 2
src/Markup/Avalonia.Markup/Data/MarkupBindingChainException.cs → src/Avalonia.Base/Data/Core/MarkupBindingChainException.cs

@@ -1,9 +1,8 @@
 using System;
 using System.Collections.Generic;
 using System.Linq;
-using Avalonia.Data;
 
-namespace Avalonia.Markup.Data
+namespace Avalonia.Data.Core
 {
     internal class MarkupBindingChainException : BindingChainException
     {

+ 1 - 1
src/Markup/Avalonia.Markup/Data/Parsers/ArgumentListParser.cs → src/Avalonia.Base/Data/Core/Parsers/ArgumentListParser.cs

@@ -5,7 +5,7 @@ using System;
 using System.Collections.Generic;
 using System.Text;
 
-namespace Avalonia.Markup.Data.Parsers
+namespace Avalonia.Data.Core.Parsers
 {
     internal static class ArgumentListParser
     {

+ 1 - 1
src/Markup/Avalonia.Markup/Data/Parsers/ExpressionParser.cs → src/Avalonia.Base/Data/Core/Parsers/ExpressionParser.cs

@@ -5,7 +5,7 @@ using System;
 using System.Collections.Generic;
 using System.Linq;
 
-namespace Avalonia.Markup.Data.Parsers
+namespace Avalonia.Data.Core.Parsers
 {
     internal class ExpressionParser
     {

+ 1 - 1
src/Markup/Avalonia.Markup/Data/Parsers/IdentifierParser.cs → src/Avalonia.Base/Data/Core/Parsers/IdentifierParser.cs

@@ -4,7 +4,7 @@
 using System.Globalization;
 using System.Text;
 
-namespace Avalonia.Markup.Data.Parsers
+namespace Avalonia.Data.Core.Parsers
 {
     internal static class IdentifierParser
     {

+ 1 - 1
src/Markup/Avalonia.Markup/Data/Parsers/Reader.cs → src/Avalonia.Base/Data/Core/Parsers/Reader.cs

@@ -3,7 +3,7 @@
 
 using System;
 
-namespace Avalonia.Markup.Data.Parsers
+namespace Avalonia.Data.Core.Parsers
 {
     internal class Reader
     {

+ 1 - 1
src/Markup/Avalonia.Markup/Data/Plugins/AvaloniaPropertyAccessorPlugin.cs → src/Avalonia.Base/Data/Core/Plugins/AvaloniaPropertyAccessorPlugin.cs

@@ -6,7 +6,7 @@ using System.Linq;
 using System.Reactive.Linq;
 using Avalonia.Data;
 
-namespace Avalonia.Markup.Data.Plugins
+namespace Avalonia.Data.Core.Plugins
 {
     /// <summary>
     /// Reads a property from a <see cref="AvaloniaObject"/>.

+ 1 - 1
src/Markup/Avalonia.Markup/Data/Plugins/DataAnnotationsValidationPlugin.cs → src/Avalonia.Base/Data/Core/Plugins/DataAnnotationsValidationPlugin.cs

@@ -8,7 +8,7 @@ using System.Linq;
 using System.Reflection;
 using Avalonia.Data;
 
-namespace Avalonia.Markup.Data.Plugins
+namespace Avalonia.Data.Core.Plugins
 {
     /// <summary>
     /// Validates properties on that have <see cref="ValidationAttribute"/>s.

+ 1 - 1
src/Markup/Avalonia.Markup/Data/Plugins/DataValidatiorBase.cs → src/Avalonia.Base/Data/Core/Plugins/DataValidatiorBase.cs

@@ -4,7 +4,7 @@
 using System;
 using Avalonia.Data;
 
-namespace Avalonia.Markup.Data.Plugins
+namespace Avalonia.Data.Core.Plugins
 {
     /// <summary>
     /// Base class for data validators.

+ 1 - 1
src/Markup/Avalonia.Markup/Data/Plugins/ExceptionValidationPlugin.cs → src/Avalonia.Base/Data/Core/Plugins/ExceptionValidationPlugin.cs

@@ -5,7 +5,7 @@ using Avalonia.Data;
 using System;
 using System.Reflection;
 
-namespace Avalonia.Markup.Data.Plugins
+namespace Avalonia.Data.Core.Plugins
 {
     /// <summary>
     /// Validates properties that report errors by throwing exceptions.

+ 1 - 1
src/Markup/Avalonia.Markup/Data/Plugins/IDataValidationPlugin.cs → src/Avalonia.Base/Data/Core/Plugins/IDataValidationPlugin.cs

@@ -4,7 +4,7 @@
 using System;
 using Avalonia.Data;
 
-namespace Avalonia.Markup.Data.Plugins
+namespace Avalonia.Data.Core.Plugins
 {
     /// <summary>
     /// Defines how data validation is observed by an <see cref="ExpressionObserver"/>.

+ 1 - 1
src/Markup/Avalonia.Markup/Data/Plugins/IPropertyAccessor.cs → src/Avalonia.Base/Data/Core/Plugins/IPropertyAccessor.cs

@@ -4,7 +4,7 @@
 using System;
 using Avalonia.Data;
 
-namespace Avalonia.Markup.Data.Plugins
+namespace Avalonia.Data.Core.Plugins
 {
     /// <summary>
     /// Defines an accessor to a property on an object returned by a 

+ 1 - 1
src/Markup/Avalonia.Markup/Data/Plugins/IPropertyAccessorPlugin.cs → src/Avalonia.Base/Data/Core/Plugins/IPropertyAccessorPlugin.cs

@@ -3,7 +3,7 @@
 
 using System;
 
-namespace Avalonia.Markup.Data.Plugins
+namespace Avalonia.Data.Core.Plugins
 {
     /// <summary>
     /// Defines how a member is read, written and observed by an

+ 1 - 1
src/Markup/Avalonia.Markup/Data/Plugins/IStreamPlugin.cs → src/Avalonia.Base/Data/Core/Plugins/IStreamPlugin.cs

@@ -3,7 +3,7 @@
 
 using System;
 
-namespace Avalonia.Markup.Data.Plugins
+namespace Avalonia.Data.Core.Plugins
 {
     /// <summary>
     /// Defines a plugin that handles the '^' stream binding operator.

+ 1 - 1
src/Markup/Avalonia.Markup/Data/Plugins/IndeiValidationPlugin.cs → src/Avalonia.Base/Data/Core/Plugins/IndeiValidationPlugin.cs

@@ -8,7 +8,7 @@ using System.Linq;
 using Avalonia.Data;
 using Avalonia.Utilities;
 
-namespace Avalonia.Markup.Data.Plugins
+namespace Avalonia.Data.Core.Plugins
 {
     /// <summary>
     /// Validates properties on objects that implement <see cref="INotifyDataErrorInfo"/>.

+ 1 - 1
src/Markup/Avalonia.Markup/Data/Plugins/InpcPropertyAccessorPlugin.cs → src/Avalonia.Base/Data/Core/Plugins/InpcPropertyAccessorPlugin.cs

@@ -10,7 +10,7 @@ using Avalonia.Data;
 using Avalonia.Logging;
 using Avalonia.Utilities;
 
-namespace Avalonia.Markup.Data.Plugins
+namespace Avalonia.Data.Core.Plugins
 {
     /// <summary>
     /// Reads a property from a standard C# object that optionally supports the

+ 1 - 1
src/Markup/Avalonia.Markup/Data/Plugins/MethodAccessorPlugin.cs → src/Avalonia.Base/Data/Core/Plugins/MethodAccessorPlugin.cs

@@ -5,7 +5,7 @@ using Avalonia.Data;
 using System.Reflection;
 using System.Linq;
 
-namespace Avalonia.Markup.Data.Plugins
+namespace Avalonia.Data.Core.Plugins
 {
     class MethodAccessorPlugin : IPropertyAccessorPlugin
     {

+ 1 - 1
src/Markup/Avalonia.Markup/Data/Plugins/ObservableStreamPlugin.cs → src/Avalonia.Base/Data/Core/Plugins/ObservableStreamPlugin.cs

@@ -3,7 +3,7 @@
 
 using System;
 
-namespace Avalonia.Markup.Data.Plugins
+namespace Avalonia.Data.Core.Plugins
 {
     /// <summary>
     /// Handles binding to <see cref="IObservable{T}"/>s for the '^' stream binding operator.

+ 1 - 1
src/Markup/Avalonia.Markup/Data/Plugins/PropertyAccessorBase.cs → src/Avalonia.Base/Data/Core/Plugins/PropertyAccessorBase.cs

@@ -4,7 +4,7 @@
 using System;
 using Avalonia.Data;
 
-namespace Avalonia.Markup.Data.Plugins
+namespace Avalonia.Data.Core.Plugins
 {
     /// <summary>
     /// Defines a default base implementation for a <see cref="IPropertyAccessor"/>.

+ 1 - 1
src/Markup/Avalonia.Markup/Data/Plugins/PropertyError.cs → src/Avalonia.Base/Data/Core/Plugins/PropertyError.cs

@@ -2,7 +2,7 @@ using System;
 using System.Reactive.Disposables;
 using Avalonia.Data;
 
-namespace Avalonia.Markup.Data.Plugins
+namespace Avalonia.Data.Core.Plugins
 {
     /// <summary>
     /// An <see cref="IPropertyAccessor"/> that represents an error.

+ 1 - 1
src/Markup/Avalonia.Markup/Data/Plugins/TaskStreamPlugin.cs → src/Avalonia.Base/Data/Core/Plugins/TaskStreamPlugin.cs

@@ -9,7 +9,7 @@ using System.Reflection;
 using System.Threading.Tasks;
 using Avalonia.Data;
 
-namespace Avalonia.Markup.Data.Plugins
+namespace Avalonia.Data.Core.Plugins
 {
     /// <summary>
     /// Handles binding to <see cref="Task"/>s for the '^' stream binding operator.

+ 2 - 2
src/Markup/Avalonia.Markup/Data/PropertyAccessorNode.cs → src/Avalonia.Base/Data/Core/PropertyAccessorNode.cs

@@ -6,9 +6,9 @@ using System.Linq;
 using System.Reactive.Disposables;
 using System.Reactive.Linq;
 using Avalonia.Data;
-using Avalonia.Markup.Data.Plugins;
+using Avalonia.Data.Core.Plugins;
 
-namespace Avalonia.Markup.Data
+namespace Avalonia.Data.Core
 {
     internal class PropertyAccessorNode : ExpressionNode, ISettableNode
     {

+ 1 - 1
src/Markup/Avalonia.Markup/Data/StreamNode.cs → src/Avalonia.Base/Data/Core/StreamNode.cs

@@ -6,7 +6,7 @@ using System.Globalization;
 using Avalonia.Data;
 using System.Reactive.Linq;
 
-namespace Avalonia.Markup.Data
+namespace Avalonia.Data.Core
 {
     internal class StreamNode : ExpressionNode
     {

+ 2 - 1
src/Avalonia.Base/Properties/AssemblyInfo.cs

@@ -1,9 +1,10 @@
-// Copyright (c) The Avalonia Project. All rights reserved.
 // Licensed under the MIT license. See licence.md file in the project root for full license information.
 
 using System.Reflection;
 using System.Runtime.CompilerServices;
+using Avalonia.Metadata;
 
+[assembly: XmlnsDefinition("https://github.com/avaloniaui", "Avalonia.Data.Converters")]
 [assembly: InternalsVisibleTo("Avalonia.Base.UnitTests")]
 [assembly: InternalsVisibleTo("Avalonia.UnitTests")]
 [assembly: InternalsVisibleTo("DynamicProxyGenAssembly2")] 

+ 3 - 3
src/Markup/Avalonia.Markup.Xaml/Avalonia.Markup.Xaml.csproj

@@ -32,6 +32,7 @@
         <Compile Include="Converters\TimeSpanTypeConverter.cs" />
         <Compile Include="Data\ResourceInclude.cs" />
         <Compile Include="MarkupExtensions\DynamicResourceExtension.cs" />
+        <Compile Include="MarkupExtensions\ResourceInclude.cs" />
         <Compile Include="MarkupExtensions\StaticResourceExtension.cs" />
         <Compile Include="MarkupExtensions\StyleIncludeExtension.cs" />
         <Compile Include="PortableXaml\AvaloniaXamlContext.cs" />
@@ -51,11 +52,11 @@
         <Compile Include="Data\DelayedBinding.cs" />
         <Compile Include="Data\MultiBinding.cs" />
         <Compile Include="Data\RelativeSource.cs" />
+        <Compile Include="Converters\ThicknessTypeConverter.cs" />
+        <Compile Include="Converters\TimeSpanTypeConverter.cs" />
         <Compile Include="MarkupExtensions\BindingExtension.cs" />
         <Compile Include="MarkupExtensions\RelativeSourceExtension.cs" />
         <Compile Include="MarkupExtensions\TemplateBindingExtension.cs" />
-        <Compile Include="Parsers\SelectorGrammar.cs" />
-        <Compile Include="Parsers\SelectorParser.cs" />
         <Compile Include="PortableXaml\AvaloniaTypeAttributeProvider.cs" />
         <Compile Include="PortableXaml\AvaloniaXamlType.cs" />
         <Compile Include="PortableXaml\TypeDescriptorExtensions.cs" />
@@ -86,6 +87,5 @@
     <ProjectReference Include="..\Avalonia.Markup\Avalonia.Markup.csproj" />
   </ItemGroup>
   <Import Project="..\..\..\build\Markup.props" />
-  <Import Project="..\..\..\build\Sprache.props" />
   <Import Project="..\..\..\build\Rx.props" />
 </Project>

+ 1 - 1
src/Markup/Avalonia.Markup.Xaml/AvaloniaXamlLoader.cs

@@ -2,7 +2,7 @@
 // Licensed under the MIT license. See licence.md file in the project root for full license information.
 
 using Avalonia.Controls;
-using Avalonia.Markup.Xaml.Data;
+using Avalonia.Markup.Data;
 using Avalonia.Markup.Xaml.PortableXaml;
 using Avalonia.Platform;
 using Portable.Xaml;

+ 1 - 1
src/Markup/Avalonia.Markup.Xaml/Converters/AvaloniaPropertyTypeConverter.cs

@@ -10,7 +10,7 @@ namespace Avalonia.Markup.Xaml.Converters
     using Avalonia.Styling;
     using Portable.Xaml;
     using Portable.Xaml.ComponentModel;
-	using System.ComponentModel;
+    using System.ComponentModel;
     using Portable.Xaml.Markup;
 
     public class AvaloniaPropertyTypeConverter : TypeConverter

+ 2 - 2
src/Markup/Avalonia.Markup.Xaml/Converters/SelectorTypeConverter.cs

@@ -3,12 +3,12 @@
 
 using System;
 using System.Globalization;
-using Avalonia.Markup.Xaml.Parsers;
+using Avalonia.Markup.Parsers;
 
 namespace Avalonia.Markup.Xaml.Converters
 {
     using Portable.Xaml.ComponentModel;
-	using System.ComponentModel;
+    using System.ComponentModel;
 
     public class SelectorTypeConverter : TypeConverter
     {

+ 2 - 1
src/Markup/Avalonia.Markup.Xaml/MarkupExtensions/BindingExtension.cs

@@ -2,12 +2,13 @@
 // Licensed under the MIT license. See licence.md file in the project root for full license information.
 
 using Avalonia.Data;
-using Avalonia.Markup.Xaml.Data;
 using System;
 
 namespace Avalonia.Markup.Xaml.MarkupExtensions
 {
     using Avalonia.Controls;
+    using Avalonia.Data.Converters;
+    using Avalonia.Markup.Data;
     using Avalonia.Styling;
     using Portable.Xaml;
     using Portable.Xaml.ComponentModel;

+ 1 - 1
src/Markup/Avalonia.Markup.Xaml/MarkupExtensions/RelativeSourceExtension.cs

@@ -1,7 +1,7 @@
 // Copyright (c) The Avalonia Project. All rights reserved.
 // Licensed under the MIT license. See licence.md file in the project root for full license information.
 
-using Avalonia.Markup.Xaml.Data;
+using Avalonia.Markup.Data;
 
 namespace Avalonia.Markup.Xaml.MarkupExtensions
 {

+ 1 - 1
src/Markup/Avalonia.Markup.Xaml/Data/ResourceInclude.cs → src/Markup/Avalonia.Markup.Xaml/MarkupExtensions/ResourceInclude.cs

@@ -4,7 +4,7 @@ using Avalonia.Controls;
 using Portable.Xaml.ComponentModel;
 using Portable.Xaml.Markup;
 
-namespace Avalonia.Markup.Xaml.Data
+namespace Avalonia.Markup.Xaml.MarkupExtensions
 {
     /// <summary>
     /// Loads a resource dictionary from a specified URL.

+ 1 - 1
src/Markup/Avalonia.Markup.Xaml/MarkupExtensions/StaticResourceExtension.cs

@@ -6,7 +6,7 @@ using System.Collections.Generic;
 using System.ComponentModel;
 using System.Reflection;
 using Avalonia.Controls;
-using Avalonia.Markup.Xaml.Data;
+using Avalonia.Markup.Data;
 using Portable.Xaml;
 using Portable.Xaml.ComponentModel;
 using Portable.Xaml.Markup;

+ 3 - 2
src/Markup/Avalonia.Markup.Xaml/MarkupExtensions/TemplateBindingExtension.cs

@@ -2,14 +2,15 @@
 // Licensed under the MIT license. See licence.md file in the project root for full license information.
 
 using Avalonia.Data;
-using Avalonia.Markup.Xaml.Data;
 
 namespace Avalonia.Markup.Xaml.MarkupExtensions
 {
     using System;
+    using Avalonia.Data.Converters;
+    using Avalonia.Markup.Data;
     using Portable.Xaml.Markup;
 
-    [MarkupExtensionReturnType(typeof(Binding))]
+    [MarkupExtensionReturnType(typeof(IBinding))]
     public class TemplateBindingExtension : MarkupExtension
     {
         public TemplateBindingExtension()

+ 2 - 1
src/Markup/Avalonia.Markup.Xaml/PortableXaml/AvaloniaRuntimeTypeProvider.cs

@@ -6,6 +6,7 @@ using System.Collections.Generic;
 using System.Linq;
 using System.Reflection;
 using Avalonia.Controls;
+using Avalonia.Markup.Data;
 using Avalonia.Markup.Xaml.Templates;
 using Avalonia.Media;
 using Avalonia.Metadata;
@@ -35,7 +36,7 @@ namespace Avalonia.Markup.Xaml.Context
             typeof(Style).GetTypeInfo().Assembly,
             typeof(DataTemplate).GetTypeInfo().Assembly,
             typeof(SolidColorBrush).GetTypeInfo().Assembly,
-            typeof(IValueConverter).GetTypeInfo().Assembly,
+            typeof(Binding).GetTypeInfo().Assembly,
         };
 
         private Dictionary<string, HashSet<ClrNamespaceInfo>> _namespaces = new Dictionary<string, HashSet<ClrNamespaceInfo>>();

+ 1 - 1
src/Markup/Avalonia.Markup.Xaml/PortableXaml/AvaloniaXamlSchemaContext.cs

@@ -1,6 +1,6 @@
 using Avalonia.Data;
 using Avalonia.Markup.Xaml.Context;
-using Avalonia.Markup.Xaml.Data;
+using Avalonia.Markup.Data;
 using Avalonia.Markup.Xaml.MarkupExtensions;
 using Avalonia.Markup.Xaml.Styling;
 using Portable.Xaml;

+ 1 - 1
src/Markup/Avalonia.Markup.Xaml/PortableXaml/AvaloniaXamlType.cs

@@ -1,6 +1,6 @@
 using Avalonia.Controls;
 using Avalonia.Data;
-using Avalonia.Markup.Xaml.Data;
+using Avalonia.Markup.Data;
 using Avalonia.Metadata;
 using Avalonia.Styling;
 using Portable.Xaml;

+ 0 - 2
src/Markup/Avalonia.Markup.Xaml/Properties/AssemblyInfo.cs

@@ -5,10 +5,8 @@ using System.Reflection;
 using Avalonia.Metadata;
 using System.Runtime.CompilerServices;
 
-[assembly: XmlnsDefinition("https://github.com/avaloniaui", "Avalonia.Markup.Xaml.Data")]
 [assembly: XmlnsDefinition("https://github.com/avaloniaui", "Avalonia.Markup.Xaml.MarkupExtensions")]
 [assembly: XmlnsDefinition("https://github.com/avaloniaui", "Avalonia.Markup.Xaml.Styling")]
 [assembly: XmlnsDefinition("https://github.com/avaloniaui", "Avalonia.Markup.Xaml.Templates")]
-[assembly: XmlnsDefinition("http://schemas.microsoft.com/winfx/2006/xaml", "Avalonia.Markup.Xaml.MarkupExtensions.Standard")]
 [assembly: InternalsVisibleTo("Avalonia.Markup.Xaml.UnitTests")]
 

+ 1 - 1
src/Markup/Avalonia.Markup.Xaml/Templates/MemberSelector.cs

@@ -3,7 +3,7 @@
 
 using Avalonia.Controls.Templates;
 using Avalonia.Data;
-using Avalonia.Markup.Data;
+using Avalonia.Data.Core;
 using System;
 using System.Reactive.Linq;
 

+ 1 - 6
src/Markup/Avalonia.Markup.Xaml/Templates/TreeDataTemplate.cs

@@ -6,8 +6,8 @@ using System.Reflection;
 using Avalonia.Controls;
 using Avalonia.Controls.Templates;
 using Avalonia.Data;
+using Avalonia.Data.Core;
 using Avalonia.Markup.Data;
-using Avalonia.Markup.Xaml.Data;
 using Avalonia.Metadata;
 
 namespace Avalonia.Markup.Xaml.Templates
@@ -48,11 +48,6 @@ namespace Avalonia.Markup.Xaml.Templates
             return null;
         }
 
-        public bool IsExpanded(object item)
-        {
-            return true;
-        }
-
         public IControl Build(object data)
         {
             var visualTreeForItem = TemplateContent.Load(Content);

+ 5 - 1
src/Markup/Avalonia.Markup/Avalonia.Markup.csproj

@@ -4,7 +4,11 @@
   </PropertyGroup>
   <ItemGroup>
     <ProjectReference Include="..\..\Avalonia.Base\Avalonia.Base.csproj" />
+    <ProjectReference Include="..\..\Avalonia.Controls\Avalonia.Controls.csproj" />
+    <ProjectReference Include="..\..\Avalonia.Input\Avalonia.Input.csproj" />
+    <ProjectReference Include="..\..\Avalonia.Styling\Avalonia.Styling.csproj" />
+    <ProjectReference Include="..\..\Avalonia.Visuals\Avalonia.Visuals.csproj" />
   </ItemGroup>
-  <Import Project="..\..\..\build\Markup.props" />
   <Import Project="..\..\..\build\Rx.props" />
+  <Import Project="..\..\..\build\Sprache.props" />
 </Project>

+ 4 - 3
src/Markup/Avalonia.Markup.Xaml/Data/Binding.cs → src/Markup/Avalonia.Markup/Data/Binding.cs

@@ -8,11 +8,12 @@ using System.Reactive.Linq;
 using System.Reflection;
 using Avalonia.Controls;
 using Avalonia.Data;
+using Avalonia.Data.Converters;
+using Avalonia.Data.Core;
 using Avalonia.LogicalTree;
-using Avalonia.Markup.Data;
 using Avalonia.VisualTree;
 
-namespace Avalonia.Markup.Xaml.Data
+namespace Avalonia.Markup.Data
 {
     /// <summary>
     /// A XAML binding.
@@ -84,7 +85,7 @@ namespace Avalonia.Markup.Xaml.Data
         /// </summary>
         public object Source { get; set; }
 
-        internal WeakReference DefaultAnchor { get; set; }
+        public WeakReference DefaultAnchor { get; set; }
 
         /// <inheritdoc/>
         public InstancedBinding Initiate(

+ 1 - 1
src/Markup/Avalonia.Markup.Xaml/Data/DelayedBinding.cs → src/Markup/Avalonia.Markup/Data/DelayedBinding.cs

@@ -9,7 +9,7 @@ using Avalonia.Controls;
 using Avalonia.Data;
 using Avalonia.Logging;
 
-namespace Avalonia.Markup.Xaml.Data
+namespace Avalonia.Markup.Data
 {
     /// <summary>
     /// Provides delayed bindings for controls.

+ 2 - 1
src/Markup/Avalonia.Markup.Xaml/Data/MultiBinding.cs → src/Markup/Avalonia.Markup/Data/MultiBinding.cs

@@ -9,9 +9,10 @@ using System.Reactive.Linq;
 using System.Reactive.Subjects;
 using Avalonia.Controls;
 using Avalonia.Data;
+using Avalonia.Data.Converters;
 using Avalonia.Metadata;
 
-namespace Avalonia.Markup.Xaml.Data
+namespace Avalonia.Markup.Data
 {
     /// <summary>
     /// A XAML binding that calculates an aggregate value from multiple child <see cref="Bindings"/>.

+ 2 - 1
src/Markup/Avalonia.Markup.Xaml/Data/RelativeSource.cs → src/Markup/Avalonia.Markup/Data/RelativeSource.cs

@@ -2,8 +2,9 @@
 // Licensed under the MIT license. See licence.md file in the project root for full license information.
 
 using System;
+using Avalonia.Controls;
 
-namespace Avalonia.Markup.Xaml.Data
+namespace Avalonia.Markup.Data
 {
     /// <summary>
     /// Defines the mode of a <see cref="RelativeSource"/> object.

+ 1 - 1
src/Markup/Avalonia.Markup.Xaml/Parsers/SelectorGrammar.cs → src/Markup/Avalonia.Markup/Parsers/SelectorGrammar.cs

@@ -9,7 +9,7 @@ using Sprache;
 // only reason they have overridden Equals methods is for unit testing.
 #pragma warning disable 659
 
-namespace Avalonia.Markup.Xaml.Parsers
+namespace Avalonia.Markup.Parsers
 {
     internal class SelectorGrammar
     {

+ 1 - 1
src/Markup/Avalonia.Markup.Xaml/Parsers/SelectorParser.cs → src/Markup/Avalonia.Markup/Parsers/SelectorParser.cs

@@ -7,7 +7,7 @@ using Avalonia.Styling;
 using Avalonia.Utilities;
 using Sprache;
 
-namespace Avalonia.Markup.Xaml.Parsers
+namespace Avalonia.Markup.Parsers
 {
     /// <summary>
     /// Parses a <see cref="Selector"/> from text.

+ 1 - 1
src/Markup/Avalonia.Markup/Properties/AssemblyInfo.cs

@@ -5,5 +5,5 @@ using System.Reflection;
 using Avalonia.Metadata;
 using System.Runtime.CompilerServices;
 
-[assembly: XmlnsDefinition("https://github.com/avaloniaui", "Avalonia.Markup")]
+[assembly: XmlnsDefinition("https://github.com/avaloniaui", "Avalonia.Markup.Data")]
 [assembly: InternalsVisibleTo("Avalonia.Markup.UnitTests")]

+ 1 - 1
tests/Avalonia.Base.UnitTests/AvaloniaObjectTests_Binding.cs

@@ -10,7 +10,7 @@ using System.Threading;
 using System.Threading.Tasks;
 using Avalonia.Data;
 using Avalonia.Logging;
-using Avalonia.Markup.Xaml.Data;
+using Avalonia.Markup.Data;
 using Avalonia.Platform;
 using Avalonia.Threading;
 using Avalonia.UnitTests;

+ 1 - 1
tests/Avalonia.Base.UnitTests/AvaloniaObjectTests_Direct.cs

@@ -12,7 +12,7 @@ using Avalonia.Data;
 using Avalonia.Logging;
 using Avalonia.Platform;
 using Avalonia.Threading;
-using Avalonia.Markup.Xaml.Data;
+using Avalonia.Markup.Data;
 using Avalonia.UnitTests;
 using Moq;
 using Xunit;

+ 2 - 1
tests/Avalonia.Base.UnitTests/Collections/AvaloniaDictionaryTests.cs

@@ -4,6 +4,7 @@
 using System.Collections.Generic;
 using System.Collections.Specialized;
 using Avalonia.Collections;
+using Avalonia.Data.Core;
 using Xunit;
 
 namespace Avalonia.Base.UnitTests.Collections
@@ -145,7 +146,7 @@ namespace Avalonia.Base.UnitTests.Collections
             var tracker = new PropertyChangedTracker(target);
             target.Clear();
 
-            Assert.Equal(new[] { "Count", "Item[]" }, tracker.Names);
+            Assert.Equal(new[] { "Count", CommonPropertyNames.IndexerName }, tracker.Names);
         }
     }
 }

+ 3 - 2
tests/Avalonia.Markup.UnitTests/Data/BindingExpressionTests.cs → tests/Avalonia.Base.UnitTests/Data/Core/BindingExpressionTests.cs

@@ -8,12 +8,13 @@ using System.Reactive.Linq;
 using System.Threading;
 using System.Threading.Tasks;
 using Avalonia.Data;
-using Avalonia.Markup.Data;
+using Avalonia.Data.Converters;
+using Avalonia.Data.Core;
 using Avalonia.UnitTests;
 using Moq;
 using Xunit;
 
-namespace Avalonia.Markup.UnitTests.Data
+namespace Avalonia.Base.UnitTests.Data.Core
 {
     public class BindingExpressionTests : IClassFixture<InvariantCultureFixture>
     {

+ 2 - 2
tests/Avalonia.Markup.UnitTests/Data/ExpressionNodeBuilderTests.cs → tests/Avalonia.Base.UnitTests/Data/Core/ExpressionNodeBuilderTests.cs

@@ -3,10 +3,10 @@
 
 using System.Collections.Generic;
 using System.Linq;
-using Avalonia.Markup.Data;
+using Avalonia.Data.Core;
 using Xunit;
 
-namespace Avalonia.Markup.UnitTests.Data
+namespace Avalonia.Base.UnitTests.Data.Core
 {
     public class ExpressionNodeBuilderTests
     {

+ 2 - 2
tests/Avalonia.Markup.UnitTests/Data/ExpressionNodeBuilderTests_Errors.cs → tests/Avalonia.Base.UnitTests/Data/Core/ExpressionNodeBuilderTests_Errors.cs

@@ -1,10 +1,10 @@
 // Copyright (c) The Avalonia Project. All rights reserved.
 // Licensed under the MIT license. See licence.md file in the project root for full license information.
 
-using Avalonia.Markup.Data;
+using Avalonia.Data.Core;
 using Xunit;
 
-namespace Avalonia.Markup.UnitTests.Data
+namespace Avalonia.Base.UnitTests.Data.Core
 {
     public class ExpressionNodeBuilderTests_Errors
     {

+ 2 - 2
tests/Avalonia.Markup.UnitTests/Data/ExpressionObserverTests_AttachedProperty.cs → tests/Avalonia.Base.UnitTests/Data/Core/ExpressionObserverTests_AttachedProperty.cs

@@ -6,10 +6,10 @@ using System.Collections.Generic;
 using System.Reactive.Linq;
 using System.Threading.Tasks;
 using Avalonia.Diagnostics;
-using Avalonia.Markup.Data;
+using Avalonia.Data.Core;
 using Xunit;
 
-namespace Avalonia.Markup.UnitTests.Data
+namespace Avalonia.Base.UnitTests.Data.Core
 {
     public class ExpressionObserverTests_AttachedProperty
     {

+ 2 - 2
tests/Avalonia.Markup.UnitTests/Data/ExpressionObserverTests_AvaloniaProperty.cs → tests/Avalonia.Base.UnitTests/Data/Core/ExpressionObserverTests_AvaloniaProperty.cs

@@ -6,10 +6,10 @@ using System.Collections.Generic;
 using System.Reactive.Linq;
 using System.Threading.Tasks;
 using Avalonia.Diagnostics;
-using Avalonia.Markup.Data;
+using Avalonia.Data.Core;
 using Xunit;
 
-namespace Avalonia.Markup.UnitTests.Data
+namespace Avalonia.Base.UnitTests.Data.Core
 {
     public class ExpressionObserverTests_AvaloniaProperty
     {

+ 2 - 2
tests/Avalonia.Markup.UnitTests/Data/ExpressionObserverTests_DataValidation.cs → tests/Avalonia.Base.UnitTests/Data/Core/ExpressionObserverTests_DataValidation.cs

@@ -7,11 +7,11 @@ using System.Collections.Generic;
 using System.Linq;
 using System.Reactive.Linq;
 using Avalonia.Data;
-using Avalonia.Markup.Data;
+using Avalonia.Data.Core;
 using Avalonia.UnitTests;
 using Xunit;
 
-namespace Avalonia.Markup.UnitTests.Data
+namespace Avalonia.Base.UnitTests.Data.Core
 {
     public class ExpressionObserverTests_DataValidation : IClassFixture<InvariantCultureFixture>
     {

+ 2 - 2
tests/Avalonia.Markup.UnitTests/Data/ExpressionObserverTests_Indexer.cs → tests/Avalonia.Base.UnitTests/Data/Core/ExpressionObserverTests_Indexer.cs

@@ -8,11 +8,11 @@ using System.Reactive.Linq;
 using System.Threading.Tasks;
 using Avalonia.Collections;
 using Avalonia.Diagnostics;
-using Avalonia.Markup.Data;
+using Avalonia.Data.Core;
 using Avalonia.UnitTests;
 using Xunit;
 
-namespace Avalonia.Markup.UnitTests.Data
+namespace Avalonia.Base.UnitTests.Data.Core
 {
     public class ExpressionObserverTests_Indexer
     {

+ 2 - 2
tests/Avalonia.Markup.UnitTests/Data/ExpressionObserverTests_Lifetime.cs → tests/Avalonia.Base.UnitTests/Data/Core/ExpressionObserverTests_Lifetime.cs

@@ -7,10 +7,10 @@ using System.Reactive;
 using System.Reactive.Linq;
 using System.Reactive.Subjects;
 using Microsoft.Reactive.Testing;
-using Avalonia.Markup.Data;
+using Avalonia.Data.Core;
 using Xunit;
 
-namespace Avalonia.Markup.UnitTests.Data
+namespace Avalonia.Base.UnitTests.Data.Core
 {
     public class ExpressionObserverTests_Lifetime
     {

+ 2 - 2
tests/Avalonia.Markup.UnitTests/Data/ExpressionObserverTests_Method.cs → tests/Avalonia.Base.UnitTests/Data/Core/ExpressionObserverTests_Method.cs

@@ -1,5 +1,5 @@
 using Avalonia.Data;
-using Avalonia.Markup.Data;
+using Avalonia.Data.Core;
 using System;
 using System.Collections.Generic;
 using System.Linq;
@@ -8,7 +8,7 @@ using System.Text;
 using System.Threading.Tasks;
 using Xunit;
 
-namespace Avalonia.Markup.UnitTests.Data
+namespace Avalonia.Base.UnitTests.Data.Core
 {
     public class ExpressionObserverTests_Method
     {

+ 2 - 2
tests/Avalonia.Markup.UnitTests/Data/ExpressionObserverTests_Negation.cs → tests/Avalonia.Base.UnitTests/Data/Core/ExpressionObserverTests_Negation.cs

@@ -5,10 +5,10 @@ using System;
 using System.Reactive.Linq;
 using System.Threading.Tasks;
 using Avalonia.Data;
-using Avalonia.Markup.Data;
+using Avalonia.Data.Core;
 using Xunit;
 
-namespace Avalonia.Markup.UnitTests.Data
+namespace Avalonia.Base.UnitTests.Data.Core
 {
     public class ExpressionObserverTests_Negation
     {

+ 2 - 2
tests/Avalonia.Markup.UnitTests/Data/ExpressionObserverTests_Observable.cs → tests/Avalonia.Base.UnitTests/Data/Core/ExpressionObserverTests_Observable.cs

@@ -6,11 +6,11 @@ using System.Collections.Generic;
 using System.Reactive.Linq;
 using System.Reactive.Subjects;
 using Avalonia.Data;
-using Avalonia.Markup.Data;
+using Avalonia.Data.Core;
 using Avalonia.UnitTests;
 using Xunit;
 
-namespace Avalonia.Markup.UnitTests.Data
+namespace Avalonia.Base.UnitTests.Data.Core
 {
     public class ExpressionObserverTests_Observable
     {

+ 3 - 3
tests/Avalonia.Markup.UnitTests/Data/ExpressionObserverTests_Property.cs → tests/Avalonia.Base.UnitTests/Data/Core/ExpressionObserverTests_Property.cs

@@ -8,12 +8,12 @@ using System.Reactive.Linq;
 using System.Reactive.Subjects;
 using Microsoft.Reactive.Testing;
 using Avalonia.Data;
-using Avalonia.Markup.Data;
+using Avalonia.Data.Core;
 using Avalonia.UnitTests;
 using Xunit;
 using System.Threading.Tasks;
 
-namespace Avalonia.Markup.UnitTests.Data
+namespace Avalonia.Base.UnitTests.Data.Core
 {
     public class ExpressionObserverTests_Property
     {
@@ -363,7 +363,7 @@ namespace Avalonia.Markup.UnitTests.Data
                 {
                     "bar",
                     new BindingNotification(
-                        new MissingMemberException("Could not find CLR property 'Bar' on 'Avalonia.Markup.UnitTests.Data.ExpressionObserverTests_Property+WithoutBar'"),
+                        new MissingMemberException("Could not find CLR property 'Bar' on 'Avalonia.Base.UnitTests.Data.Core.ExpressionObserverTests_Property+WithoutBar'"),
                         BindingErrorType.Error),
                     "baz",
                 },

+ 2 - 2
tests/Avalonia.Markup.UnitTests/Data/ExpressionObserverTests_SetValue.cs → tests/Avalonia.Base.UnitTests/Data/Core/ExpressionObserverTests_SetValue.cs

@@ -4,11 +4,11 @@
 using System;
 using System.Reactive.Linq;
 using System.Reactive.Subjects;
-using Avalonia.Markup.Data;
+using Avalonia.Data.Core;
 using Avalonia.UnitTests;
 using Xunit;
 
-namespace Avalonia.Markup.UnitTests.Data
+namespace Avalonia.Base.UnitTests.Data.Core
 {
     public class ExpressionObserverTests_SetValue
     {

+ 2 - 2
tests/Avalonia.Markup.UnitTests/Data/ExpressionObserverTests_Task.cs → tests/Avalonia.Base.UnitTests/Data/Core/ExpressionObserverTests_Task.cs

@@ -6,11 +6,11 @@ using System.Collections.Generic;
 using System.Reactive.Linq;
 using System.Threading.Tasks;
 using Avalonia.Data;
-using Avalonia.Markup.Data;
+using Avalonia.Data.Core;
 using Avalonia.UnitTests;
 using Xunit;
 
-namespace Avalonia.Markup.UnitTests.Data
+namespace Avalonia.Base.UnitTests.Data.Core
 {
     public class ExpressionObserverTests_Task
     {

+ 1 - 1
tests/Avalonia.Markup.UnitTests/Data/IndeiBase.cs → tests/Avalonia.Base.UnitTests/Data/Core/IndeiBase.cs

@@ -7,7 +7,7 @@ using System.ComponentModel;
 using System.Runtime.CompilerServices;
 using Avalonia.UnitTests;
 
-namespace Avalonia.Markup.UnitTests.Data
+namespace Avalonia.Base.UnitTests.Data.Core
 {
     internal abstract class IndeiBase : NotifyingBase, INotifyDataErrorInfo
     {

+ 1 - 1
tests/Avalonia.Markup.UnitTests/Data/Plugins/DataAnnotationsValidationPluginTests.cs → tests/Avalonia.Base.UnitTests/Data/Core/Plugins/DataAnnotationsValidationPluginTests.cs

@@ -5,7 +5,7 @@ using System;
 using System.Collections.Generic;
 using System.ComponentModel.DataAnnotations;
 using Avalonia.Data;
-using Avalonia.Markup.Data.Plugins;
+using Avalonia.Data.Core.Plugins;
 using Avalonia.UnitTests;
 using Xunit;
 

+ 2 - 2
tests/Avalonia.Markup.UnitTests/Data/Plugins/ExceptionValidationPluginTests.cs → tests/Avalonia.Base.UnitTests/Data/Core/Plugins/ExceptionValidationPluginTests.cs

@@ -5,11 +5,11 @@ using System;
 using System.Collections.Generic;
 using System.Reactive.Linq;
 using Avalonia.Data;
-using Avalonia.Markup.Data.Plugins;
+using Avalonia.Data.Core.Plugins;
 using Avalonia.UnitTests;
 using Xunit;
 
-namespace Avalonia.Markup.UnitTests.Data.Plugins
+namespace Avalonia.Base.UnitTests.Data.Core.Plugins
 {
     public class ExceptionValidationPluginTests
     {

+ 2 - 2
tests/Avalonia.Markup.UnitTests/Data/Plugins/IndeiValidationPluginTests.cs → tests/Avalonia.Base.UnitTests/Data/Core/Plugins/IndeiValidationPluginTests.cs

@@ -6,10 +6,10 @@ using System.Collections;
 using System.Collections.Generic;
 using System.Reactive.Linq;
 using Avalonia.Data;
-using Avalonia.Markup.Data.Plugins;
+using Avalonia.Data.Core.Plugins;
 using Xunit;
 
-namespace Avalonia.Markup.UnitTests.Data.Plugins
+namespace Avalonia.Base.UnitTests.Data.Core.Plugins
 {
     public class IndeiValidationPluginTests
     {

+ 2 - 1
tests/Avalonia.Markup.UnitTests/DefaultValueConverterTests.cs → tests/Avalonia.Base.UnitTests/Data/DefaultValueConverterTests.cs

@@ -7,8 +7,9 @@ using Avalonia.Data;
 using Xunit;
 using System.Windows.Input;
 using System;
+using Avalonia.Data.Converters;
 
-namespace Avalonia.Markup.UnitTests
+namespace Avalonia.Base.UnitTests.Data.Converters
 {
     public class DefaultValueConverterTests
     {

+ 1 - 1
tests/Avalonia.Markup.UnitTests/UnitTestSynchronizationContext.cs → tests/Avalonia.Base.UnitTests/Data/UnitTestSynchronizationContext.cs

@@ -6,7 +6,7 @@ using System.Collections.Generic;
 using System.Reactive.Disposables;
 using System.Threading;
 
-namespace Avalonia.Markup.UnitTests
+namespace Avalonia.Base.UnitTests.Data
 {
     internal sealed class UnitTestSynchronizationContext : SynchronizationContext
     {

+ 1 - 1
tests/Avalonia.Controls.UnitTests/AutoCompleteBoxTests.cs

@@ -10,7 +10,7 @@ using Avalonia.Controls.Primitives;
 using Avalonia.Controls.Presenters;
 using Avalonia.Controls.Templates;
 using Avalonia.Data;
-using Avalonia.Markup.Xaml.Data;
+using Avalonia.Markup.Data;
 using Avalonia.Platform;
 using Avalonia.Threading;
 using Avalonia.UnitTests;

+ 1 - 1
tests/Avalonia.Controls.UnitTests/ButtonTests.cs

@@ -1,6 +1,6 @@
 using System;
 using System.Windows.Input;
-using Avalonia.Markup.Xaml.Data;
+using Avalonia.Markup.Data;
 using Xunit;
 
 namespace Avalonia.Controls.UnitTests

+ 1 - 1
tests/Avalonia.Controls.UnitTests/ContentControlTests.cs

@@ -12,7 +12,7 @@ using Avalonia.Styling;
 using Avalonia.UnitTests;
 using Avalonia.VisualTree;
 using Xunit;
-using Avalonia.Markup.Xaml.Data;
+using Avalonia.Markup.Data;
 using Avalonia.Data;
 using System.Collections.Generic;
 

+ 1 - 1
tests/Avalonia.Controls.UnitTests/DatePickerTests.cs

@@ -10,7 +10,7 @@ using Avalonia.Controls.Primitives;
 using Avalonia.Controls.Presenters;
 using Avalonia.Controls.Templates;
 using Avalonia.Data;
-using Avalonia.Markup.Xaml.Data;
+using Avalonia.Markup.Data;
 using Avalonia.Platform;
 using Avalonia.UnitTests;
 using Moq;

+ 1 - 1
tests/Avalonia.Controls.UnitTests/ListBoxTests_Single.cs

@@ -9,7 +9,7 @@ using Avalonia.Controls.Templates;
 using Avalonia.Data;
 using Avalonia.Input;
 using Avalonia.LogicalTree;
-using Avalonia.Markup.Xaml.Data;
+using Avalonia.Markup.Data;
 using Avalonia.Styling;
 using Avalonia.VisualTree;
 using Xunit;

برخی فایل ها در این مقایسه diff نمایش داده نمی شوند زیرا تعداد فایل ها بسیار زیاد است