using System;
using Avalonia;
using Avalonia.VisualTree;
using Avalonia.Controls;
using ReactiveUI;
namespace Avalonia.ReactiveUI
{
///
/// A ReactiveUI UserControl that implements
/// and will activate your ViewModel automatically if it supports activation.
///
/// ViewModel type.
public class ReactiveUserControl : UserControl, IViewFor where TViewModel : class
{
public static readonly StyledProperty ViewModelProperty = AvaloniaProperty
.Register, TViewModel>(nameof(ViewModel));
///
/// Initializes a new instance of the class.
///
public ReactiveUserControl()
{
this.WhenAnyValue(x => x.DataContext)
.Subscribe(context => ViewModel = context as TViewModel);
this.WhenAnyValue(x => x.ViewModel)
.Subscribe(model => DataContext = model);
}
///
/// The ViewModel.
///
public TViewModel ViewModel
{
get => GetValue(ViewModelProperty);
set => SetValue(ViewModelProperty, value);
}
object IViewFor.ViewModel
{
get => ViewModel;
set => ViewModel = (TViewModel)value;
}
}
}