Passer au contenu principal
Version : 11.0.0

Activation de la Vue

Pour que la fonctionnalité WhenActivated de ReactiveUI fonctionne, vous devez utiliser des classes de base personnalisées du package Avalonia.ReactiveUI, telles que ReactiveWindow<TViewModel> ou ReactiveUserControl<TViewModel>. Bien sûr, vous pouvez également implémenter l'interface IViewFor<TViewModel> manuellement dans votre classe, mais assurez-vous de stocker le ViewModel dans un AvaloniaProperty.

Exemple d'Activation

ViewModel.cs

Ce modèle de vue implémente l'interface IActivatableViewModel. Lorsque la vue correspondante est attachée à l'arbre visuel, le code à l'intérieur du bloc WhenActivated sera appelé. Lorsque la vue correspondante est détachée de l'arbre visuel, le composite disposable sera éliminé. ReactiveObject est la classe de base pour les classes de modèle de vue, et elle implémente INotifyPropertyChanged.

public class ViewModel : ReactiveObject, IActivatableViewModel
{
public ViewModelActivator Activator { get; }

public ViewModel()
{
Activator = new ViewModelActivator();
this.WhenActivated((CompositeDisposable disposables) =>
{
/* activation de l'handle */
Disposable
.Create(() => { /* désactivation de l'handle */ })
.DisposeWith(disposables);
});
}
}

View.xaml

Voici l'interface utilisateur pour le modèle de vue que vous voyez ci-dessus.

<Window xmlns="https://github.com/avaloniaui"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
Background="#f0f0f0" FontFamily="Ubuntu"
MinHeight="590" MinWidth="750">
<TextBlock Text="Hello, world!" />
</Window>

View.xaml.cs

Voici le code-behind pour le fichier View.xaml que vous voyez ci-dessus. N'oubliez pas de toujours inclure un appel à WhenActivated dans le constructeur de votre Vue, sinon ReactiveUI ne pourra pas déterminer quand le modèle de vue est activé.

public class View : ReactiveWindow<ViewModel>
{
public View()
{
// Le bloc WhenActivated du ViewModel sera également appelé.
this.WhenActivated(disposables => { /* Gérer l'activation de la vue, etc. */ });
AvaloniaXamlLoader.Load(this);
}
}

Code-Behind Bindings ReactiveUI

public class View : ReactiveWindow<ViewModel>
{
// Supposons que le contrôle Button ait l'attribut Name="ExampleButton" défini dans XAML.
public View()
{
this.WhenActivated(disposables =>
{
// Lier la 'ExampleCommand' au 'ExampleButton' défini ci-dessus.
this.BindCommand(ViewModel, x => x.ExampleCommand, x => x.ExampleButton)
.DisposeWith(disposables);
});
AvaloniaXamlLoader.Load(this);
}
}