You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
In Maui a ReactiveContentView [Child] nested inside a ReactiveContentPage [Parent] does not get deactivated (even if I explicity call Activator.Deactivate on the Child view model from inside the Parent view model). This applies only to the Child view. Oddly enough the Child view model does deactivate. Both the view and view model for the Parent do get deactivated properly. I'm using Splat to register (Locator.CurrentMutable.Register). I've tried both ViewModelViewHost and injecting the RCV in directly. Resolving View to ViewModels works fine.
Step to reproduce
# Parent page: I'm inside a ReactiveTabbedPage
<rxui:ReactiveContentPage
xmlns:v="clr-namespace:Assembly.Views"
xmlns:vm="clr-namespace:Assembly.ViewModels"
x:DataType="vm:ParentViewModel"
x:TypeArguments="vm:ParentViewModel"
x:Class="NQXMaui.Views.ParentPage"
BindingContext="vm:ParentViewModel">
<rxui:ReactiveContentPage.Content>
<ScrollView>
<VerticalStackLayout>
<v:Child x:Name="Child"></v:Child><!-- Method 1-->
<!--<rxui:ViewModelViewHost x:Name="ChildViewModelViewHost"></rxui:ViewModelViewHost>--><!-- Method 2-->
</VerticalStackLayout>
</ScrollView>
</rxui:ReactiveContentPage.Content>
</rxui:ReactiveContentPage>
# Parent code-behind
public partial class ParentPage
{
public ParentPage()
{
InitializeComponent();
//BindingContext = ViewModel;
this.WhenActivated(disposables =>
{
// Method 1
this.OneWayBind(ViewModel,
vm => vm.ChildViewModel,
v => v.Child.ViewModel)
.DisposeWith(disposables);
// Method 2
/*
this.OneWayBind(ViewModel,
vm => vm.ChildViewModel,
v => v.ChildViewModelViewHost.ViewModel)
.DisposeWith(disposables);
*/
// Always gets called switching between tabs.
Disposable
.Create(() => Debug.WriteLine($"Deactivating: {nameof(ParentPage)}"))
.DisposeWith(disposables);
});
}
}
# Parent VM
public class ParentViewModel : ReactiveObject, IActivatableViewModel
{
public ViewModelActivator Activator { get; }
//[Reactive]
public ChildViewModel ChildViewModel { get; /* private set; */ }
public ParentViewModel()
{
Activator = new ViewModelActivator();
ChildViewModel = new ChildViewModel();
}
this.WhenActivated(disposables =>
{
// ChildViewModel.Activator.Activate();
// Always gets called switching between tabs.
Disposable
.Create(() =>
{
Debug.WriteLine($"Deactivating: {nameof(ParentViewModel)}")
// ChildViewModel.Activator.Deactivate()
})
.DisposeWith(disposables);
});
}
# Child
<rxui:ReactiveContentView
xmlns:vm="clr-namespace:Assembly.ViewModels"
x:DataType="vm:ChildViewModel"
x:TypeArguments="vm:ChildViewModel"
x:Class="Assembly.ChildView">
<rxui:ReactiveContentView.Content>
...
</rxui:ReactiveContentView.Content>
</rxui:ReactiveContentView>
# Child code-behind
public partial class ChildView
{
public ChildView()
{
InitializeComponent();
BindingContext = ViewModel;
this.WhenActivated(disposables =>
{
// Never gets called.
Disposable.Create(() => Debug.WriteLine($"Deactivating: {nameof(ChildView)}"))
.DisposeWith(disposables); ;
});
}
}
# Child VM
public class ChildViewModel : ReactiveObject, IActivatableViewModel
{
public ViewModelActivator Activator { get; }
public ChildViewModel()
{
Activator = new ViewModelActivator();
this.WhenActivated(disposables =>
{
// Sometimes gets called depending on method used (see above).
Disposable.Create(() => Debug.WriteLine($"Deactivating: {nameof(ChildViewModel)}"))
.DisposeWith(disposables);
});
}
}
Describe the bug 🐞
In Maui a ReactiveContentView [Child] nested inside a ReactiveContentPage [Parent] does not get deactivated (even if I explicity call Activator.Deactivate on the Child view model from inside the Parent view model). This applies only to the Child view. Oddly enough the Child view model does deactivate. Both the view and view model for the Parent do get deactivated properly. I'm using Splat to register (Locator.CurrentMutable.Register). I've tried both ViewModelViewHost and injecting the RCV in directly. Resolving View to ViewModels works fine.
Step to reproduce
Reproduction repository
https://github.com/reactiveui/ReactiveUI
Expected behavior
ChildView calls:
Screenshots 🖼️
No response
IDE
Visual Studio 2022
Operating system
Windows
Version
No response
Device
No response
ReactiveUI Version
ReactiveUI.Maui 18.4.1, 18.4.22 (VS preview release for the latter)
Additional information ℹ️
No response
The text was updated successfully, but these errors were encountered: