瀏覽代碼

Merge remote-tracking branch 'upstream/master' into skia-merge

Nikita Tsukanov 8 年之前
父節點
當前提交
f28d5627e6
共有 30 個文件被更改,包括 301 次插入165 次删除
  1. 3 0
      .gitmodules
  2. 1 1
      Avalonia.sln
  3. 0 5
      build/ReactiveUI.props
  4. 7 6
      build/Rx.props
  5. 2 20
      packages.cake
  6. 0 1
      samples/BindingTest/App.xaml.cs
  7. 1 1
      samples/BindingTest/BindingTest.csproj
  8. 6 4
      samples/BindingTest/ViewModels/MainWindowViewModel.cs
  9. 8 1
      samples/ControlCatalog/ControlCatalog.csproj
  10. 1 0
      samples/ControlCatalog/MainView.xaml
  11. 36 0
      samples/ControlCatalog/Pages/ContextMenuPage.xaml
  12. 18 0
      samples/ControlCatalog/Pages/ContextMenuPage.xaml.cs
  13. 25 48
      samples/ControlCatalog/Pages/MenuPage.xaml
  14. 0 1
      samples/RenderTest/Program.cs
  15. 0 1
      samples/RenderTest/RenderTest.csproj
  16. 6 4
      samples/RenderTest/ViewModels/MainWindowViewModel.cs
  17. 0 1
      samples/VirtualizationTest/Program.cs
  18. 15 10
      samples/VirtualizationTest/ViewModels/MainWindowViewModel.cs
  19. 0 1
      samples/VirtualizationTest/VirtualizationTest.csproj
  20. 3 3
      scripts/ReplaceNugetCache.ps1
  21. 5 0
      scripts/ReplaceNugetCacheRelease.ps1
  22. 0 24
      src/Avalonia.ReactiveUI/AppBuilderExtensions.cs
  23. 71 2
      src/Avalonia.ReactiveUI/Avalonia.ReactiveUI.csproj
  24. 27 0
      src/Avalonia.ReactiveUI/Properties/AssemblyInfo.cs
  25. 23 0
      src/Avalonia.ReactiveUI/Registrations.cs
  26. 34 0
      src/Avalonia.ReactiveUI/Shims.cs
  27. 1 0
      src/Avalonia.ReactiveUI/src
  28. 1 0
      tests/Avalonia.Markup.Xaml.UnitTests/Avalonia.Markup.Xaml.UnitTests.csproj
  29. 3 15
      tests/Avalonia.Markup.Xaml.UnitTests/Data/BindingTests.cs
  30. 4 16
      tests/Avalonia.Markup.Xaml.UnitTests/Data/BindingTests_Source.cs

+ 3 - 0
.gitmodules

@@ -1,3 +1,6 @@
+[submodule "src/Avalonia.ReactiveUI/src"]
+	path = src/Avalonia.ReactiveUI/src
+	url = https://github.com/reactiveui/ReactiveUI.git
 [submodule "src/Avalonia.HtmlRenderer/external"]
 	path = src/Avalonia.HtmlRenderer/external
 	url = https://github.com/AvaloniaUI/HTML-Renderer.git

+ 1 - 1
Avalonia.sln

@@ -2,6 +2,7 @@ Microsoft Visual Studio Solution File, Format Version 12.00
 # Visual Studio 15
 VisualStudioVersion = 15.0.26510.0
 VisualStudioVersion = 15.0.26430.16
+VisualStudioVersion = 15.0.26228.4
 MinimumVisualStudioVersion = 10.0.40219.1
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Avalonia.Base", "src\Avalonia.Base\Avalonia.Base.csproj", "{B09B78D8-9B26-48B0-9149-D64A2F120F3F}"
 EndProject
@@ -162,7 +163,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Props", "Props", "{F3AC8BC1
 		build\Microsoft.Reactive.Testing.props = build\Microsoft.Reactive.Testing.props
 		build\Moq.props = build\Moq.props
 		build\NetCore.props = build\NetCore.props
-		build\ReactiveUI.props = build\ReactiveUI.props
 		build\Rx.props = build\Rx.props
 		build\Serilog.props = build\Serilog.props
 		build\Serilog.Sinks.Trace.props = build\Serilog.Sinks.Trace.props

+ 0 - 5
build/ReactiveUI.props

@@ -1,5 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup>
-    <PackageReference Include="reactiveui" Version="8.0.0-alpha0034" />
-  </ItemGroup>
-</Project>

+ 7 - 6
build/Rx.props

@@ -1,10 +1,11 @@
 <Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
   <ItemGroup>
-    <PackageReference Include="System.Reactive" Version="3.1.0" />
-    <PackageReference Include="System.Reactive.Core" Version="3.1.0" />
-    <PackageReference Include="System.Reactive.Interfaces" Version="3.1.0" />
-    <PackageReference Include="System.Reactive.Linq" Version="3.1.0" />
-    <PackageReference Include="System.Reactive.PlatformServices" Version="3.1.0" />
-    <PackageReference Condition="$(TargetFramework.StartsWith('net4'))" Include="System.Reactive.Windows.Threading" Version="3.1.0" />
+    <PackageReference Include="System.Reactive" Version="3.0.0" />
+    <PackageReference Include="System.Reactive.Core" Version="3.0.0" />
+    <PackageReference Include="System.Reactive.Interfaces" Version="3.0.0" />
+    <PackageReference Include="System.Reactive.Linq" Version="3.0.0" />
+    <PackageReference Include="System.Reactive.PlatformServices" Version="3.0.0" />
+    <PackageReference Condition="'$(TargetFramework)' == 'net45'" Include="System.Reactive.Windows.Threading" Version="3.0.0" />
+    <PackageReference Condition="'$(TargetFramework)' == 'net461'" Include="System.Reactive.Windows.Threading" Version="3.0.0" />
   </ItemGroup>
 </Project>

+ 2 - 20
packages.cake

@@ -111,7 +111,6 @@ public class Packages
         var SplatVersion = packageVersions["Splat"].FirstOrDefault().Item1;
         var SpracheVersion = packageVersions["Sprache"].FirstOrDefault().Item1;
         var SystemReactiveVersion = packageVersions["System.Reactive"].FirstOrDefault().Item1;
-        var ReactiveUIVersion = packageVersions["reactiveui"].FirstOrDefault().Item1;
         var SystemValueTupleVersion = packageVersions["System.ValueTuple"].FirstOrDefault().Item1;
         SkiaSharpVersion = packageVersions["SkiaSharp"].FirstOrDefault().Item1;
 		SkiaSharpLinuxVersion = packageVersions["Avalonia.Skia.Linux.Natives"].FirstOrDefault().Item1;
@@ -125,7 +124,6 @@ public class Packages
         context.Information("Package: Splat, version: {0}", SplatVersion);
         context.Information("Package: Sprache, version: {0}", SpracheVersion);
         context.Information("Package: System.Reactive, version: {0}", SystemReactiveVersion);
-        context.Information("Package: reactiveui, version: {0}", ReactiveUIVersion);
         context.Information("Package: System.ValueTuple, version: {0}", SystemValueTupleVersion);
         context.Information("Package: SkiaSharp, version: {0}", SkiaSharpVersion);
         context.Information("Package: Avalonia.Skia.Linux.Natives, version: {0}", SkiaSharpLinuxVersion);
@@ -178,6 +176,7 @@ public class Packages
             new [] { "./src/", "Avalonia.Visuals", ".xml" },
             new [] { "./src/", "Avalonia.Styling", ".dll" },
             new [] { "./src/", "Avalonia.Styling", ".xml" },
+            new [] { "./src/", "Avalonia.ReactiveUI", ".dll" },
             new [] { "./src/", "Avalonia.Themes.Default", ".dll" },
             new [] { "./src/", "Avalonia.Themes.Default", ".xml" },
             new [] { "./src/Markup/", "Avalonia.Markup", ".dll" },
@@ -274,24 +273,7 @@ public class Packages
                 },
                 BasePath = context.Directory("./src/Avalonia.HtmlRenderer/bin/" + parameters.DirSuffix + "/netstandard1.3"),
                 OutputDirectory = parameters.NugetRoot
-            },
-            ///////////////////////////////////////////////////////////////////////////////
-            // Avalonia.ReactiveUI
-            ///////////////////////////////////////////////////////////////////////////////
-            new NuGetPackSettings()
-            {
-                Id = "Avalonia.ReactiveUI",
-                Dependencies = new DependencyBuilder(this)
-                {
-                    new NuSpecDependency() { Id = "Avalonia", Version = parameters.Version },
-                }.Deps(new string[] {null}, "reactiveui"),
-                Files = new []
-                {
-                    new NuSpecContent { Source = "Avalonia.ReactiveUI.dll", Target = "lib/netstandard1.3" }
-                },
-                BasePath = context.Directory("./src/Avalonia.ReactiveUI/bin/" + parameters.DirSuffix + "/netstandard1.3"),
-                OutputDirectory = parameters.NugetRoot
-            },
+            }
         };
 
         var nuspecNuGetSettingsMobile = new []

+ 0 - 1
samples/BindingTest/App.xaml.cs

@@ -20,7 +20,6 @@ namespace BindingTest
 
             AppBuilder.Configure<App>()
                 .UsePlatformDetect()
-                .UseReactiveUI()
                 .Start<MainWindow>();
         }
 

+ 1 - 1
samples/BindingTest/BindingTest.csproj

@@ -45,6 +45,7 @@
     <Reference Include="System.Data.DataSetExtensions" />
     <Reference Include="Microsoft.CSharp" />
     <Reference Include="System.Data" />
+    <Reference Include="System.Net.Http" />
     <Reference Include="System.Xml" />
   </ItemGroup>
   <ItemGroup>
@@ -161,5 +162,4 @@
   <Import Project="..\..\build\Serilog.Sinks.Trace.props" />
   <Import Project="..\..\build\Splat.props" />
   <Import Project="..\..\build\Rx.props" />
-  <Import Project="..\..\build\ReactiveUI.props" />
 </Project>

+ 6 - 4
samples/BindingTest/ViewModels/MainWindowViewModel.cs

@@ -27,13 +27,15 @@ namespace BindingTest.ViewModels
 
             SelectedItems = new ObservableCollection<TestItem>();
 
-            ShuffleItems = ReactiveCommand.Create(() =>
+            ShuffleItems = ReactiveCommand.Create();
+            ShuffleItems.Subscribe(_ =>
             {
                 var r = new Random();
                 Items.Move(r.Next(Items.Count), 1);
             });
 
-            StringValueCommand = ReactiveCommand.Create<object>(param =>
+            StringValueCommand = ReactiveCommand.Create();
+            StringValueCommand.Subscribe(param =>
             {
                 BooleanFlag = !BooleanFlag;
                 StringValue = param.ToString();
@@ -54,7 +56,7 @@ namespace BindingTest.ViewModels
 
         public ObservableCollection<TestItem> Items { get; }
         public ObservableCollection<TestItem> SelectedItems { get; }
-        public ReactiveCommand ShuffleItems { get; }
+        public ReactiveCommand<object> ShuffleItems { get; }
 
         public string BooleanString
         {
@@ -87,7 +89,7 @@ namespace BindingTest.ViewModels
         }
 
         public IObservable<string> CurrentTimeObservable { get; }
-        public ReactiveCommand StringValueCommand { get; }
+        public ReactiveCommand<object> StringValueCommand { get; }
 
         public DataAnnotationsErrorViewModel DataAnnotationsValidation { get; } = new DataAnnotationsErrorViewModel();
         public ExceptionErrorViewModel ExceptionDataValidation { get; } = new ExceptionErrorViewModel();

+ 8 - 1
samples/ControlCatalog/ControlCatalog.csproj

@@ -21,6 +21,9 @@
     <ErrorReport>prompt</ErrorReport>
     <WarningLevel>4</WarningLevel>
   </PropertyGroup>
+  <ItemGroup>
+    <None Remove="Pages\ContextMenuPage.xaml" />
+  </ItemGroup>
   <ItemGroup>
     <!-- A reference to the entire .NET Framework is automatically included -->
     <EmbeddedResource Include="App.xaml">
@@ -44,6 +47,7 @@
     <EmbeddedResource Include="Pages\CheckBoxPage.xaml">
       <SubType>Designer</SubType>
     </EmbeddedResource>
+    <EmbeddedResource Include="Pages\ContextMenuPage.xaml" />
     <EmbeddedResource Include="Pages\DropDownPage.xaml">
       <SubType>Designer</SubType>
     </EmbeddedResource>
@@ -94,6 +98,9 @@
     <Compile Include="Pages\CarouselPage.xaml.cs">
       <DependentUpon>CarouselPage.xaml</DependentUpon>
     </Compile>
+    <Compile Include="Pages\ContextMenuPage.xaml.cs">
+      <DependentUpon>ContextMenuPage.xaml</DependentUpon>
+    </Compile>
     <Compile Include="Pages\CheckBoxPage.xaml.cs">
       <DependentUpon>CheckBoxPage.xaml</DependentUpon>
     </Compile>
@@ -117,7 +124,7 @@
     </Compile>
     <Compile Include="Pages\SliderPage.xaml.cs">
       <DependentUpon>SliderPage.xaml</DependentUpon>
-    </Compile>
+    </Compile>    
     <Compile Include="Pages\TreeViewPage.xaml.cs">
       <DependentUpon>TreeViewPage.xaml</DependentUpon>
     </Compile>

+ 1 - 0
samples/ControlCatalog/MainView.xaml

@@ -10,6 +10,7 @@
     <TabItem Header="Canvas"><pages:CanvasPage/></TabItem>
     <TabItem Header="Carousel"><pages:CarouselPage/></TabItem>
     <TabItem Header="CheckBox"><pages:CheckBoxPage/></TabItem>
+    <TabItem Header="ContextMenu"><pages:ContextMenuPage/></TabItem>
     <TabItem Header="DropDown"><pages:DropDownPage/></TabItem>
     <TabItem Header="Expander"><pages:ExpanderPage/></TabItem>
     <TabItem Header="Image"><pages:ImagePage/></TabItem>

+ 36 - 0
samples/ControlCatalog/Pages/ContextMenuPage.xaml

@@ -0,0 +1,36 @@
+<UserControl xmlns="https://github.com/avaloniaui">
+    <StackPanel Orientation="Vertical" Gap="4">
+        <TextBlock Classes="h1">Context Menu</TextBlock>
+        <TextBlock Classes="h2">A right click menu that can be applied to any control.</TextBlock>
+
+        <StackPanel Orientation="Horizontal"
+              Margin="0,16,0,0"
+              HorizontalAlignment="Center"
+              Gap="16">
+            <Border Background="{StyleResource ThemeAccentBrush}"
+              Padding="48,48,48,48">
+                <Border.ContextMenu>
+                    <ContextMenu>
+                        <MenuItem Header="Standard _Menu Item"/>
+                        <Separator/>
+                        <MenuItem Header="Menu with _Submenu">
+                            <MenuItem Header="Submenu _1"/>
+                            <MenuItem Header="Submenu _2"/>
+                        </MenuItem>
+                        <MenuItem Header="Menu Item with _Icon">
+                            <MenuItem.Icon>
+                                <Image Source="resm:ControlCatalog.Assets.github_icon.png"/>
+                            </MenuItem.Icon>
+                        </MenuItem>
+                        <MenuItem Header="Menu Item with _Checkbox">
+                            <MenuItem.Icon>
+                                <CheckBox BorderThickness="0" IsHitTestVisible="False" IsChecked="True"/>
+                            </MenuItem.Icon>
+                        </MenuItem>
+                    </ContextMenu>
+                </Border.ContextMenu>
+                <TextBlock Text="Right Click Here"/>
+            </Border>
+        </StackPanel>
+    </StackPanel>
+</UserControl>

+ 18 - 0
samples/ControlCatalog/Pages/ContextMenuPage.xaml.cs

@@ -0,0 +1,18 @@
+using Avalonia.Controls;
+using Avalonia.Markup.Xaml;
+
+namespace ControlCatalog.Pages
+{
+    public class ContextMenuPage : UserControl
+    {
+        public ContextMenuPage()
+        {
+            this.InitializeComponent();
+        }
+
+        private void InitializeComponent()
+        {
+            AvaloniaXamlLoader.Load(this);
+        }
+    }
+}

+ 25 - 48
samples/ControlCatalog/Pages/MenuPage.xaml

@@ -3,56 +3,33 @@
     <TextBlock Classes="h1">Menu</TextBlock>
     <TextBlock Classes="h2">A window menu</TextBlock>
 
-    <StackPanel Orientation="Horizontal"
+        <StackPanel Orientation="Horizontal"
               Margin="0,16,0,0"
               HorizontalAlignment="Center"
               Gap="16">
-      <Menu>
-        <MenuItem Header="_First">
-          <MenuItem Header="Standard _Menu Item"/>
-          <Separator/>
-          <MenuItem Header="Menu with _Submenu">
-            <MenuItem Header="Submenu _1"/>
-            <MenuItem Header="Submenu _2"/>
-          </MenuItem>
-          <MenuItem Header="Menu Item with _Icon">
-            <MenuItem.Icon>
-              <Image Source="resm:ControlCatalog.Assets.github_icon.png"/>
-            </MenuItem.Icon>
-          </MenuItem>
-          <MenuItem Header="Menu Item with _Checkbox">
-            <MenuItem.Icon>
-              <CheckBox BorderThickness="0" IsHitTestVisible="False" IsChecked="True"/>
-            </MenuItem.Icon>
-          </MenuItem>
-        </MenuItem>
-        <MenuItem Header="_Second">
-          <MenuItem Header="Second _Menu Item"/>
-        </MenuItem>
-      </Menu>
+            <Menu>
+                <MenuItem Header="_First">
+                    <MenuItem Header="Standard _Menu Item"/>
+                    <Separator/>
+                    <MenuItem Header="Menu with _Submenu">
+                        <MenuItem Header="Submenu _1"/>
+                        <MenuItem Header="Submenu _2"/>
+                    </MenuItem>
+                    <MenuItem Header="Menu Item with _Icon">
+                        <MenuItem.Icon>
+                            <Image Source="resm:ControlCatalog.Assets.github_icon.png"/>
+                        </MenuItem.Icon>
+                    </MenuItem>
+                    <MenuItem Header="Menu Item with _Checkbox">
+                        <MenuItem.Icon>
+                            <CheckBox BorderThickness="0" IsHitTestVisible="False" IsChecked="True"/>
+                        </MenuItem.Icon>
+                    </MenuItem>
+                </MenuItem>
+                <MenuItem Header="_Second">
+                    <MenuItem Header="Second _Menu Item"/>
+                </MenuItem>
+            </Menu>
+        </StackPanel>
     </StackPanel>
-
-    <TextBlock Classes="h2" Text="A context menu (right click)">
-      <TextBlock.ContextMenu>
-        <ContextMenu>
-          <MenuItem Header="Standard _Menu Item"/>
-          <Separator/>
-          <MenuItem Header="Menu with _Submenu">
-            <MenuItem Header="Submenu _1"/>
-            <MenuItem Header="Submenu _2"/>
-          </MenuItem>
-          <MenuItem Header="Menu Item with _Icon">
-            <MenuItem.Icon>
-              <Image Source="resm:ControlCatalog.Assets.github_icon.png"/>
-            </MenuItem.Icon>
-          </MenuItem>
-          <MenuItem Header="Menu Item with _Checkbox">
-            <MenuItem.Icon>
-              <CheckBox BorderThickness="0" IsHitTestVisible="False" IsChecked="True"/>
-            </MenuItem.Icon>
-          </MenuItem>
-        </ContextMenu>
-      </TextBlock.ContextMenu>
-    </TextBlock>
-  </StackPanel>
 </UserControl>

+ 0 - 1
samples/RenderTest/Program.cs

@@ -18,7 +18,6 @@ namespace RenderTest
             // again.
             AppBuilder.Configure<App>()
                 .UsePlatformDetect()
-                .UseReactiveUI()
                 .Start<MainWindow>();
         }
 

+ 0 - 1
samples/RenderTest/RenderTest.csproj

@@ -183,5 +183,4 @@
   <Import Project="..\..\build\Serilog.Sinks.Trace.props" />
   <Import Project="..\..\build\Splat.props" />
   <Import Project="..\..\build\Rx.props" />
-  <Import Project="..\..\build\ReactiveUI.props" />
 </Project>

+ 6 - 4
samples/RenderTest/ViewModels/MainWindowViewModel.cs

@@ -10,8 +10,10 @@ namespace RenderTest.ViewModels
 
         public MainWindowViewModel()
         {
-            ToggleDrawDirtyRects = ReactiveCommand.Create(() => DrawDirtyRects = !DrawDirtyRects);
-            ToggleDrawFps = ReactiveCommand.Create(() => DrawFps = !DrawFps);
+            ToggleDrawDirtyRects = ReactiveCommand.Create();
+            ToggleDrawDirtyRects.Subscribe(_ => DrawDirtyRects = !DrawDirtyRects);
+            ToggleDrawFps = ReactiveCommand.Create();
+            ToggleDrawFps.Subscribe(_ => DrawFps = !DrawFps);
         }
 
         public bool DrawDirtyRects
@@ -26,7 +28,7 @@ namespace RenderTest.ViewModels
             set { this.RaiseAndSetIfChanged(ref drawFps, value); }
         }
 
-        public ReactiveCommand ToggleDrawDirtyRects { get; }
-        public ReactiveCommand ToggleDrawFps { get; }
+        public ReactiveCommand<object> ToggleDrawDirtyRects { get; }
+        public ReactiveCommand<object> ToggleDrawFps { get; }
     }
 }

+ 0 - 1
samples/VirtualizationTest/Program.cs

@@ -17,7 +17,6 @@ namespace VirtualizationTest
 
             AppBuilder.Configure<App>()
                .UsePlatformDetect()
-               .UseReactiveUI()
                .Start<MainWindow>();
         }
 

+ 15 - 10
samples/VirtualizationTest/ViewModels/MainWindowViewModel.cs

@@ -23,15 +23,20 @@ namespace VirtualizationTest.ViewModels
         public MainWindowViewModel()
         {
             this.WhenAnyValue(x => x.ItemCount).Subscribe(ResizeItems);
-            RecreateCommand = ReactiveCommand.Create(() => Recreate());
+            RecreateCommand = ReactiveCommand.Create();
+            RecreateCommand.Subscribe(_ => Recreate());
 
-            AddItemCommand = ReactiveCommand.Create(() => AddItem());
+            AddItemCommand = ReactiveCommand.Create();
+            AddItemCommand.Subscribe(_ => AddItem());
 
-            RemoveItemCommand = ReactiveCommand.Create(() => Remove());
+            RemoveItemCommand = ReactiveCommand.Create();
+            RemoveItemCommand.Subscribe(_ => Remove());
 
-            SelectFirstCommand = ReactiveCommand.Create(() => SelectItem(0));
+            SelectFirstCommand = ReactiveCommand.Create();
+            SelectFirstCommand.Subscribe(_ => SelectItem(0));
 
-            SelectLastCommand = ReactiveCommand.Create(() => SelectItem(Items.Count - 1));
+            SelectLastCommand = ReactiveCommand.Create();
+            SelectLastCommand.Subscribe(_ => SelectItem(Items.Count - 1));
         }
 
         public string NewItemString
@@ -73,11 +78,11 @@ namespace VirtualizationTest.ViewModels
         public IEnumerable<ItemVirtualizationMode> VirtualizationModes => 
             Enum.GetValues(typeof(ItemVirtualizationMode)).Cast<ItemVirtualizationMode>();
 
-        public ReactiveCommand AddItemCommand { get; private set; }
-        public ReactiveCommand RecreateCommand { get; private set; }
-        public ReactiveCommand RemoveItemCommand { get; private set; }
-        public ReactiveCommand SelectFirstCommand { get; private set; }
-        public ReactiveCommand SelectLastCommand { get; private set; }
+        public ReactiveCommand<object> AddItemCommand { get; private set; }
+        public ReactiveCommand<object> RecreateCommand { get; private set; }
+        public ReactiveCommand<object> RemoveItemCommand { get; private set; }
+        public ReactiveCommand<object> SelectFirstCommand { get; private set; }
+        public ReactiveCommand<object> SelectLastCommand { get; private set; }
 
         private void ResizeItems(int count)
         {

+ 0 - 1
samples/VirtualizationTest/VirtualizationTest.csproj

@@ -158,5 +158,4 @@
   <Import Project="..\..\build\Serilog.Sinks.Trace.props" />
   <Import Project="..\..\build\Splat.props" />
   <Import Project="..\..\build\Rx.props" />
-  <Import Project="..\..\build\ReactiveUI.props" />
 </Project>

+ 3 - 3
scripts/ReplaceNugetCache.ps1

@@ -1,5 +1,5 @@
 copy ..\samples\ControlCatalog.NetCore\bin\Debug\netcoreapp1.1\Avalonia**.dll ~\.nuget\packages\avalonia\$args\lib\netcoreapp1.0\
-copy ..\samples\ControlCatalog.NetCore.\bin\Debug\netcoreapp1.1\Avalonia**.dll ~\.nuget\packages\avalonia\$args\lib\netstandard1.1\
-copy ..\samples\ControlCatalog.NetCore.\bin\Debug\netcoreapp1.1\Avalonia**.dll ~\.nuget\packages\avalonia.gtk3\$args\lib\netstandard1.1\
+copy ..\samples\ControlCatalog.NetCore.\bin\Debug\netcoreapp1.1\Avalonia**.dll ~\.nuget\packages\avalonia\$args\lib\netstandard1.3\
+copy ..\samples\ControlCatalog.NetCore.\bin\Debug\netcoreapp1.1\Avalonia**.dll ~\.nuget\packages\avalonia.gtk3\$args\lib\netstandard1.3\
 copy ..\samples\ControlCatalog.NetCore.\bin\Debug\netcoreapp1.1\Avalonia**.dll ~\.nuget\packages\avalonia.skia.desktop\$args\lib\netstandard1.3\
-copy ..\samples\ControlCatalog.NetCore.\bin\Debug\netcoreapp1.1\Avalonia**.dll ~\.nuget\packages\avalonia.win32\$args\lib\netstandard1.1\
+copy ..\samples\ControlCatalog.NetCore.\bin\Debug\netcoreapp1.1\Avalonia**.dll ~\.nuget\packages\avalonia.win32\$args\lib\netstandard1.3\

+ 5 - 0
scripts/ReplaceNugetCacheRelease.ps1

@@ -0,0 +1,5 @@
+copy ..\samples\ControlCatalog.NetCore\bin\Release\netcoreapp1.1\Avalonia**.dll ~\.nuget\packages\avalonia\$args\lib\netcoreapp1.0\
+copy ..\samples\ControlCatalog.NetCore.\bin\Release\netcoreapp1.1\Avalonia**.dll ~\.nuget\packages\avalonia\$args\lib\netstandard1.3\
+copy ..\samples\ControlCatalog.NetCore.\bin\Release\netcoreapp1.1\Avalonia**.dll ~\.nuget\packages\avalonia.gtk3\$args\lib\netstandard1.3\
+copy ..\samples\ControlCatalog.NetCore.\bin\Release\netcoreapp1.1\Avalonia**.dll ~\.nuget\packages\avalonia.skia.desktop\$args\lib\netstandard1.3\
+copy ..\samples\ControlCatalog.NetCore.\bin\Release\netcoreapp1.1\Avalonia**.dll ~\.nuget\packages\avalonia.win32\$args\lib\netstandard1.3\

+ 0 - 24
src/Avalonia.ReactiveUI/AppBuilderExtensions.cs

@@ -1,24 +0,0 @@
-// 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.Controls;
-using Avalonia.Threading;
-using ReactiveUI;
-using System;
-using System.Reactive.Concurrency;
-using System.Threading;
-
-namespace Avalonia
-{
-    public static class AppBuilderExtensions
-    {
-        public static TAppBuilder UseReactiveUI<TAppBuilder>(this TAppBuilder builder)
-            where TAppBuilder : AppBuilderBase<TAppBuilder>, new()
-        {
-            return builder.AfterSetup(_ =>
-            {
-                RxApp.MainThreadScheduler = AvaloniaScheduler.Instance;
-            });
-        }
-    }
-}

+ 71 - 2
src/Avalonia.ReactiveUI/Avalonia.ReactiveUI.csproj

@@ -1,10 +1,80 @@
 <Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
     <TargetFramework>netstandard1.3</TargetFramework>
+    <EnableDefaultCompileItems>False</EnableDefaultCompileItems>
     <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
   </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>TRACE;DEBUG;MONO PORTABLE;NETSTANDARD1_1</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE;MONO PORTABLE;RELEASE;NETSTANDARD1_1</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <ItemGroup>
+    <None Remove="Shims.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="Properties\AssemblyInfo.cs" />
+  </ItemGroup>
   <ItemGroup>
-    <Compile Include="..\Shared\SharedAssemblyInfo.cs" Link="Properties\SharedAssemblyInfo.cs" />
+    <Compile Include="Registrations.cs" />
+    <Compile Include="Shims.cs" />
+    <Compile Include="src\ReactiveUI\ExpressionMixins.cs" />
+    <Compile Include="src\ReactiveUI\ExpressionRewriter.cs" />
+    <Compile Include="src\ReactiveUI\Activation.cs" />
+    <Compile Include="src\ReactiveUI\ReactiveBinding.cs" />
+    <Compile Include="src\ReactiveUI\AutoPersistHelper.cs" />
+    <Compile Include="src\ReactiveUI\BindingTypeConverters.cs" />
+    <Compile Include="src\ReactiveUI\CollectionDebugView.cs" />
+    <Compile Include="src\ReactiveUI\CommandBinding.cs" />
+    <Compile Include="src\ReactiveUI\CompatMixins.cs" />
+    <Compile Include="src\ReactiveUI\ContractStubs.cs" />
+    <Compile Include="src\ReactiveUI\CreatesCommandBinding.cs" />
+    <Compile Include="src\ReactiveUI\DefaultPropertyBinding.cs" />
+    <Compile Include="src\ReactiveUI\Errors.cs" />
+    <Compile Include="src\ReactiveUI\IDependencyResolver.cs" />
+    <Compile Include="src\ReactiveUI\INPCObservableForProperty.cs" />
+    <Compile Include="src\ReactiveUI\Interfaces.cs" />
+    <Compile Include="src\ReactiveUI\IROObservableForProperty.cs" />
+    <Compile Include="src\ReactiveUI\MessageBus.cs" />
+    <Compile Include="src\ReactiveUI\MobileLifecycle.cs" />
+    <Compile Include="src\ReactiveUI\NullDefaultPropertyBindingProvider.cs" />
+    <Compile Include="src\ReactiveUI\ObservableAsPropertyHelper.cs" />
+    <Compile Include="src\ReactiveUI\ObservedChangedMixin.cs" />
+    <Compile Include="src\ReactiveUI\OrderedComparer.cs" />
+    <Compile Include="src\ReactiveUI\POCOObservableForProperty.cs" />
+    <Compile Include="src\ReactiveUI\PropertyBinding.cs" />
+    <Compile Include="src\ReactiveUI\ReactiveList.cs" />
+    <Compile Include="src\ReactiveUI\ReactiveCollectionMixins.cs" />
+    <Compile Include="src\ReactiveUI\ReactiveCommand.cs" />
+    <Compile Include="src\ReactiveUI\ReactiveNotifyPropertyChangedMixin.cs" />
+    <Compile Include="src\ReactiveUI\ReactiveObject.cs" />
+    <Compile Include="src\ReactiveUI\RefcountDisposeWrapper.cs" />
+    <Compile Include="src\ReactiveUI\Reflection.cs" />
+    <Compile Include="src\ReactiveUI\RegisterableInterfaces.cs" />
+    <Compile Include="src\ReactiveUI\Registrations.cs" />
+    <Compile Include="src\ReactiveUI\RoutableViewModelMixin.cs" />
+    <Compile Include="src\ReactiveUI\RoutingState.cs" />
+    <Compile Include="src\ReactiveUI\RxApp.cs" />
+    <Compile Include="src\ReactiveUI\ViewLocator.cs" />
+    <Compile Include="src\ReactiveUI\ScheduledSubject.cs" />
+    <Compile Include="src\ReactiveUI\VariadicTemplates.cs" />
+    <Compile Include="src\ReactiveUI\WaitForDispatcherScheduler.cs" />
+    <Compile Include="src\ReactiveUI\LoggingMixins.cs" />
+    <Compile Include="src\ReactiveUI\IReactiveObject.cs" />
+    <Compile Include="src\ReactiveUI\WeakEventManager.cs" />
+    <Compile Include="src\ReactiveUI\Legacy\ReactiveCommand.cs" />
   </ItemGroup>
   <ItemGroup>
     <ProjectReference Include="..\Avalonia.Animation\Avalonia.Animation.csproj" />
@@ -17,6 +87,5 @@
     <ProjectReference Include="..\Avalonia.Visuals\Avalonia.Visuals.csproj" />
   </ItemGroup>
   <Import Project="..\..\build\Rx.props" />
-  <Import Project="..\..\build\ReactiveUI.props" />
   <Import Project="..\..\build\Splat.props" />
 </Project>

+ 27 - 0
src/Avalonia.ReactiveUI/Properties/AssemblyInfo.cs

@@ -1,6 +1,33 @@
 // 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.Resources;
 using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
 
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
 [assembly: AssemblyTitle("Avalonia.ReactiveUI")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("Avalonia.ReactiveUI")]
+[assembly: AssemblyCopyright("Copyright \u00A9  2015")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+[assembly: NeutralResourcesLanguage("en")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers 
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]

+ 23 - 0
src/Avalonia.ReactiveUI/Registrations.cs

@@ -0,0 +1,23 @@
+// 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;
+using System.Reactive.Concurrency;
+using System.Threading;
+
+
+namespace ReactiveUI
+{
+    /// <summary>
+    /// Ignore me. This class is a secret handshake between RxUI and RxUI.Xaml
+    /// in order to register certain classes on startup that would be difficult
+    /// to register otherwise.
+    /// </summary>
+    public class PlatformRegistrations : IWantsToRegisterStuff
+    {
+        public void Register(Action<Func<object>, Type> registerFunction)
+        {
+            RxApp.MainThreadScheduler = new SynchronizationContextScheduler(SynchronizationContext.Current);
+        }
+    }
+}

+ 34 - 0
src/Avalonia.ReactiveUI/Shims.cs

@@ -0,0 +1,34 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace System.Runtime.Serialization
+{
+    class IgnoreDataMemberAttribute : Attribute
+    {
+    }
+
+    class DataMemberAttribute : Attribute
+    {
+    }
+    class OnDeserializedAttribute : Attribute
+    {
+    }
+
+    class DataContractAttribute : Attribute
+    {
+    }
+
+    class StreamingContext { }
+}
+
+namespace System.Diagnostics.Contracts
+{
+    static class Contract
+    {
+        public static void Requires(bool condition)
+        {
+
+        }
+    }
+}

+ 1 - 0
src/Avalonia.ReactiveUI/src

@@ -0,0 +1 @@
+Subproject commit 3f725c808b1d4c8457f0d3204e0a071aa462cd75

+ 1 - 0
tests/Avalonia.Markup.Xaml.UnitTests/Avalonia.Markup.Xaml.UnitTests.csproj

@@ -19,6 +19,7 @@
     <ProjectReference Include="..\..\src\Avalonia.Input\Avalonia.Input.csproj" />
     <ProjectReference Include="..\..\src\Avalonia.Interactivity\Avalonia.Interactivity.csproj" />
     <ProjectReference Include="..\..\src\Avalonia.Layout\Avalonia.Layout.csproj" />
+    <ProjectReference Include="..\..\src\Avalonia.ReactiveUI\Avalonia.ReactiveUI.csproj" />
     <ProjectReference Include="..\..\src\Avalonia.Visuals\Avalonia.Visuals.csproj" />
     <ProjectReference Include="..\..\src\Avalonia.Styling\Avalonia.Styling.csproj" />
     <ProjectReference Include="..\..\src\Avalonia.Themes.Default\Avalonia.Themes.Default.csproj" />

+ 3 - 15
tests/Avalonia.Markup.Xaml.UnitTests/Data/BindingTests.cs

@@ -10,9 +10,8 @@ using Avalonia.Data;
 using Avalonia.Markup.Data;
 using Avalonia.Markup.Xaml.Data;
 using Moq;
+using ReactiveUI;
 using Xunit;
-using System.ComponentModel;
-using System.Runtime.CompilerServices;
 
 namespace Avalonia.Markup.Xaml.UnitTests.Data
 {
@@ -351,25 +350,14 @@ namespace Avalonia.Markup.Xaml.UnitTests.Data
             }
         }
 
-        public class Source : INotifyPropertyChanged
+        public class Source : ReactiveObject
         {
             private string _foo;
 
             public string Foo
             {
                 get { return _foo; }
-                set
-                {
-                    _foo = value;
-                    RaisePropertyChanged();
-                }
-            }
-
-            public event PropertyChangedEventHandler PropertyChanged;
-
-            private void RaisePropertyChanged([CallerMemberName] string prop = "")
-            {
-                PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(prop));
+                set { this.RaiseAndSetIfChanged(ref _foo, value); }
             }
         }
 

+ 4 - 16
tests/Avalonia.Markup.Xaml.UnitTests/Data/BindingTests_Source.cs

@@ -6,9 +6,8 @@ using Avalonia.Controls;
 using Avalonia.Data;
 using Avalonia.Markup.Data;
 using Avalonia.Markup.Xaml.Data;
+using ReactiveUI;
 using Xunit;
-using System.ComponentModel;
-using System.Runtime.CompilerServices;
 
 namespace Avalonia.Markup.Xaml.UnitTests.Data
 {
@@ -25,26 +24,15 @@ namespace Avalonia.Markup.Xaml.UnitTests.Data
 
             Assert.Equal(target.Text, "foo");
         }
-        
-        public class Source : INotifyPropertyChanged
+
+        public class Source : ReactiveObject
         {
             private string _foo;
 
             public string Foo
             {
                 get { return _foo; }
-                set
-                {
-                    _foo = value;
-                    RaisePropertyChanged();
-                }
-            }
-
-            public event PropertyChangedEventHandler PropertyChanged;
-
-            private void RaisePropertyChanged([CallerMemberName] string prop = "")
-            {
-                PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(prop));
+                set { this.RaiseAndSetIfChanged(ref _foo, value); }
             }
         }
     }