Browse Source

Merge branch 'master' into patch-1

pull/5377/head
Steven Kirk 6 years ago
committed by GitHub
parent
commit
c8a22e1a98
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 2
      src/Avalonia.ReactiveUI/AutoDataTemplateBindingHook.cs
  2. 2
      src/Avalonia.ReactiveUI/Avalonia.ReactiveUI.csproj
  3. 12
      src/Avalonia.ReactiveUI/ReactiveUserControl.cs
  4. 14
      src/Avalonia.ReactiveUI/ReactiveWindow.cs
  5. 16
      src/Avalonia.ReactiveUI/RoutedViewHost.cs
  6. 16
      src/Avalonia.ReactiveUI/TransitioningContentControl.cs
  7. 12
      src/Avalonia.ReactiveUI/ViewModelViewHost.cs

2
src/Avalonia.ReactiveUI/AutoDataTemplateBindingHook.cs

@ -29,7 +29,7 @@ namespace Avalonia.ReactiveUI
/// <inheritdoc/> /// <inheritdoc/>
public bool ExecuteHook( public bool ExecuteHook(
object source, object target, object? source, object target,
Func<IObservedChange<object, object>[]> getCurrentViewModelProperties, Func<IObservedChange<object, object>[]> getCurrentViewModelProperties,
Func<IObservedChange<object, object>[]> getCurrentViewProperties, Func<IObservedChange<object, object>[]> getCurrentViewProperties,
BindingDirection direction) BindingDirection direction)

2
src/Avalonia.ReactiveUI/Avalonia.ReactiveUI.csproj

@ -3,6 +3,8 @@
<TargetFramework>netstandard2.0</TargetFramework> <TargetFramework>netstandard2.0</TargetFramework>
<PackageId>Avalonia.ReactiveUI</PackageId> <PackageId>Avalonia.ReactiveUI</PackageId>
<SignAssembly>false</SignAssembly> <SignAssembly>false</SignAssembly>
<Nullable>enable</Nullable>
<WarningsAsErrors>nullable</WarningsAsErrors>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\..\packages\Avalonia\Avalonia.csproj" /> <ProjectReference Include="..\..\packages\Avalonia\Avalonia.csproj" />

12
src/Avalonia.ReactiveUI/ReactiveUserControl.cs

@ -17,8 +17,8 @@ namespace Avalonia.ReactiveUI
/// <typeparam name="TViewModel">ViewModel type.</typeparam> /// <typeparam name="TViewModel">ViewModel type.</typeparam>
public class ReactiveUserControl<TViewModel> : UserControl, IViewFor<TViewModel> where TViewModel : class public class ReactiveUserControl<TViewModel> : UserControl, IViewFor<TViewModel> where TViewModel : class
{ {
public static readonly StyledProperty<TViewModel> ViewModelProperty = AvaloniaProperty public static readonly StyledProperty<TViewModel?> ViewModelProperty = AvaloniaProperty
.Register<ReactiveUserControl<TViewModel>, TViewModel>(nameof(ViewModel)); .Register<ReactiveUserControl<TViewModel>, TViewModel?>(nameof(ViewModel));
/// <summary> /// <summary>
/// Initializes a new instance of the <see cref="ReactiveUserControl{TViewModel}"/> class. /// Initializes a new instance of the <see cref="ReactiveUserControl{TViewModel}"/> class.
@ -34,16 +34,16 @@ namespace Avalonia.ReactiveUI
/// <summary> /// <summary>
/// The ViewModel. /// The ViewModel.
/// </summary> /// </summary>
public TViewModel ViewModel public TViewModel? ViewModel
{ {
get => GetValue(ViewModelProperty); get => GetValue(ViewModelProperty);
set => SetValue(ViewModelProperty, value); set => SetValue(ViewModelProperty, value);
} }
object IViewFor.ViewModel object? IViewFor.ViewModel
{ {
get => ViewModel; get => ViewModel;
set => ViewModel = (TViewModel)value; set => ViewModel = (TViewModel?)value;
} }
protected override void OnDataContextChanged(EventArgs e) protected override void OnDataContextChanged(EventArgs e)
@ -51,7 +51,7 @@ namespace Avalonia.ReactiveUI
ViewModel = DataContext as TViewModel; ViewModel = DataContext as TViewModel;
} }
private void OnViewModelChanged(object value) private void OnViewModelChanged(object? value)
{ {
if (value == null) if (value == null)
{ {

14
src/Avalonia.ReactiveUI/ReactiveWindow.cs

@ -17,8 +17,8 @@ namespace Avalonia.ReactiveUI
/// <typeparam name="TViewModel">ViewModel type.</typeparam> /// <typeparam name="TViewModel">ViewModel type.</typeparam>
public class ReactiveWindow<TViewModel> : Window, IViewFor<TViewModel> where TViewModel : class public class ReactiveWindow<TViewModel> : Window, IViewFor<TViewModel> where TViewModel : class
{ {
public static readonly StyledProperty<TViewModel> ViewModelProperty = AvaloniaProperty public static readonly StyledProperty<TViewModel?> ViewModelProperty = AvaloniaProperty
.Register<ReactiveWindow<TViewModel>, TViewModel>(nameof(ViewModel)); .Register<ReactiveWindow<TViewModel>, TViewModel?>(nameof(ViewModel));
/// <summary> /// <summary>
/// Initializes a new instance of the <see cref="ReactiveWindow{TViewModel}"/> class. /// Initializes a new instance of the <see cref="ReactiveWindow{TViewModel}"/> class.
@ -35,19 +35,19 @@ namespace Avalonia.ReactiveUI
/// <summary> /// <summary>
/// The ViewModel. /// The ViewModel.
/// </summary> /// </summary>
public TViewModel ViewModel public TViewModel? ViewModel
{ {
get => GetValue(ViewModelProperty); get => GetValue(ViewModelProperty);
set => SetValue(ViewModelProperty, value); set => SetValue(ViewModelProperty, value);
} }
object IViewFor.ViewModel object? IViewFor.ViewModel
{ {
get => ViewModel; get => ViewModel;
set => ViewModel = (TViewModel)value; set => ViewModel = (TViewModel?)value;
} }
private void OnDataContextChanged(object value) private void OnDataContextChanged(object? value)
{ {
if (value is TViewModel viewModel) if (value is TViewModel viewModel)
{ {
@ -59,7 +59,7 @@ namespace Avalonia.ReactiveUI
} }
} }
private void OnViewModelChanged(object value) private void OnViewModelChanged(object? value)
{ {
if (value == null) if (value == null)
{ {

16
src/Avalonia.ReactiveUI/RoutedViewHost.cs

@ -55,8 +55,8 @@ namespace Avalonia.ReactiveUI
/// <summary> /// <summary>
/// <see cref="AvaloniaProperty"/> for the <see cref="Router"/> property. /// <see cref="AvaloniaProperty"/> for the <see cref="Router"/> property.
/// </summary> /// </summary>
public static readonly StyledProperty<RoutingState> RouterProperty = public static readonly StyledProperty<RoutingState?> RouterProperty =
AvaloniaProperty.Register<RoutedViewHost, RoutingState>(nameof(Router)); AvaloniaProperty.Register<RoutedViewHost, RoutingState?>(nameof(Router));
/// <summary> /// <summary>
/// Initializes a new instance of the <see cref="RoutedViewHost"/> class. /// Initializes a new instance of the <see cref="RoutedViewHost"/> class.
@ -67,12 +67,12 @@ namespace Avalonia.ReactiveUI
{ {
var routerRemoved = this var routerRemoved = this
.WhenAnyValue(x => x.Router) .WhenAnyValue(x => x.Router)
.Where(router => router == null) .Where(router => router == null)!
.Cast<object>(); .Cast<object?>();
this.WhenAnyValue(x => x.Router) this.WhenAnyValue(x => x.Router)
.Where(router => router != null) .Where(router => router != null)
.SelectMany(router => router.CurrentViewModel) .SelectMany(router => router!.CurrentViewModel)
.Merge(routerRemoved) .Merge(routerRemoved)
.Subscribe(NavigateToViewModel) .Subscribe(NavigateToViewModel)
.DisposeWith(disposables); .DisposeWith(disposables);
@ -82,7 +82,7 @@ namespace Avalonia.ReactiveUI
/// <summary> /// <summary>
/// Gets or sets the <see cref="RoutingState"/> of the view model stack. /// Gets or sets the <see cref="RoutingState"/> of the view model stack.
/// </summary> /// </summary>
public RoutingState Router public RoutingState? Router
{ {
get => GetValue(RouterProperty); get => GetValue(RouterProperty);
set => SetValue(RouterProperty, value); set => SetValue(RouterProperty, value);
@ -91,13 +91,13 @@ namespace Avalonia.ReactiveUI
/// <summary> /// <summary>
/// Gets or sets the ReactiveUI view locator used by this router. /// Gets or sets the ReactiveUI view locator used by this router.
/// </summary> /// </summary>
public IViewLocator ViewLocator { get; set; } public IViewLocator? ViewLocator { get; set; }
/// <summary> /// <summary>
/// Invoked when ReactiveUI router navigates to a view model. /// Invoked when ReactiveUI router navigates to a view model.
/// </summary> /// </summary>
/// <param name="viewModel">ViewModel to which the user navigates.</param> /// <param name="viewModel">ViewModel to which the user navigates.</param>
private void NavigateToViewModel(object viewModel) private void NavigateToViewModel(object? viewModel)
{ {
if (Router == null) if (Router == null)
{ {

16
src/Avalonia.ReactiveUI/TransitioningContentControl.cs

@ -13,20 +13,20 @@ namespace Avalonia.ReactiveUI
/// <summary> /// <summary>
/// <see cref="AvaloniaProperty"/> for the <see cref="PageTransition"/> property. /// <see cref="AvaloniaProperty"/> for the <see cref="PageTransition"/> property.
/// </summary> /// </summary>
public static readonly StyledProperty<IPageTransition> PageTransitionProperty = public static readonly StyledProperty<IPageTransition?> PageTransitionProperty =
AvaloniaProperty.Register<TransitioningContentControl, IPageTransition>(nameof(PageTransition), AvaloniaProperty.Register<TransitioningContentControl, IPageTransition?>(nameof(PageTransition),
new CrossFade(TimeSpan.FromSeconds(0.5))); new CrossFade(TimeSpan.FromSeconds(0.5)));
/// <summary> /// <summary>
/// <see cref="AvaloniaProperty"/> for the <see cref="DefaultContent"/> property. /// <see cref="AvaloniaProperty"/> for the <see cref="DefaultContent"/> property.
/// </summary> /// </summary>
public static readonly StyledProperty<object> DefaultContentProperty = public static readonly StyledProperty<object?> DefaultContentProperty =
AvaloniaProperty.Register<TransitioningContentControl, object>(nameof(DefaultContent)); AvaloniaProperty.Register<TransitioningContentControl, object?>(nameof(DefaultContent));
/// <summary> /// <summary>
/// Gets or sets the animation played when content appears and disappears. /// Gets or sets the animation played when content appears and disappears.
/// </summary> /// </summary>
public IPageTransition PageTransition public IPageTransition? PageTransition
{ {
get => GetValue(PageTransitionProperty); get => GetValue(PageTransitionProperty);
set => SetValue(PageTransitionProperty, value); set => SetValue(PageTransitionProperty, value);
@ -35,7 +35,7 @@ namespace Avalonia.ReactiveUI
/// <summary> /// <summary>
/// Gets or sets the content displayed whenever there is no page currently routed. /// Gets or sets the content displayed whenever there is no page currently routed.
/// </summary> /// </summary>
public object DefaultContent public object? DefaultContent
{ {
get => GetValue(DefaultContentProperty); get => GetValue(DefaultContentProperty);
set => SetValue(DefaultContentProperty, value); set => SetValue(DefaultContentProperty, value);
@ -44,7 +44,7 @@ namespace Avalonia.ReactiveUI
/// <summary> /// <summary>
/// Gets or sets the content with animation. /// Gets or sets the content with animation.
/// </summary> /// </summary>
public new object Content public new object? Content
{ {
get => base.Content; get => base.Content;
set => UpdateContentWithTransition(value); set => UpdateContentWithTransition(value);
@ -60,7 +60,7 @@ namespace Avalonia.ReactiveUI
/// Updates the content with transitions. /// Updates the content with transitions.
/// </summary> /// </summary>
/// <param name="content">New content to set.</param> /// <param name="content">New content to set.</param>
private async void UpdateContentWithTransition(object content) private async void UpdateContentWithTransition(object? content)
{ {
if (PageTransition != null) if (PageTransition != null)
await PageTransition.Start(this, null, true); await PageTransition.Start(this, null, true);

12
src/Avalonia.ReactiveUI/ViewModelViewHost.cs

@ -15,8 +15,8 @@ namespace Avalonia.ReactiveUI
/// <summary> /// <summary>
/// <see cref="AvaloniaProperty"/> for the <see cref="ViewModel"/> property. /// <see cref="AvaloniaProperty"/> for the <see cref="ViewModel"/> property.
/// </summary> /// </summary>
public static readonly AvaloniaProperty<object> ViewModelProperty = public static readonly AvaloniaProperty<object?> ViewModelProperty =
AvaloniaProperty.Register<ViewModelViewHost, object>(nameof(ViewModel)); AvaloniaProperty.Register<ViewModelViewHost, object?>(nameof(ViewModel));
/// <summary> /// <summary>
/// Initializes a new instance of the <see cref="ViewModelViewHost"/> class. /// Initializes a new instance of the <see cref="ViewModelViewHost"/> class.
@ -34,7 +34,7 @@ namespace Avalonia.ReactiveUI
/// <summary> /// <summary>
/// Gets or sets the ViewModel to display. /// Gets or sets the ViewModel to display.
/// </summary> /// </summary>
public object ViewModel public object? ViewModel
{ {
get => GetValue(ViewModelProperty); get => GetValue(ViewModelProperty);
set => SetValue(ViewModelProperty, value); set => SetValue(ViewModelProperty, value);
@ -43,13 +43,13 @@ namespace Avalonia.ReactiveUI
/// <summary> /// <summary>
/// Gets or sets the view locator. /// Gets or sets the view locator.
/// </summary> /// </summary>
public IViewLocator ViewLocator { get; set; } public IViewLocator? ViewLocator { get; set; }
/// <summary> /// <summary>
/// Invoked when ReactiveUI router navigates to a view model. /// Invoked when ReactiveUI router navigates to a view model.
/// </summary> /// </summary>
/// <param name="viewModel">ViewModel to which the user navigates.</param> /// <param name="viewModel">ViewModel to which the user navigates.</param>
private void NavigateToViewModel(object viewModel) private void NavigateToViewModel(object? viewModel)
{ {
if (viewModel == null) if (viewModel == null)
{ {
@ -74,4 +74,4 @@ namespace Avalonia.ReactiveUI
Content = viewInstance; Content = viewInstance;
} }
} }
} }

Loading…
Cancel
Save