diff --git a/Filtration/ViewModels/ItemFilterBlockGroupViewModel.cs b/Filtration/ViewModels/ItemFilterBlockGroupViewModel.cs index d4fd44b..f88b715 100644 --- a/Filtration/ViewModels/ItemFilterBlockGroupViewModel.cs +++ b/Filtration/ViewModels/ItemFilterBlockGroupViewModel.cs @@ -28,7 +28,6 @@ namespace Filtration.ViewModels ParentGroup = parent; Advanced = itemFilterBlockGroup.Advanced; SourceBlockGroup = itemFilterBlockGroup; - SourceBlockGroup.ClearStatusChangeSubscribers(); SourceBlockGroup.BlockGroupStatusChanged += OnSourceBlockGroupStatusChanged; IsShowChecked = itemFilterBlockGroup.IsShowChecked; IsEnableChecked = itemFilterBlockGroup.IsEnableChecked; @@ -256,5 +255,18 @@ namespace Filtration.ViewModels IsEnableChecked = SourceBlockGroup.IsEnableChecked; } } + + public void ClearStatusChangeSubscriptions() + { + if (SourceBlockGroup != null) + { + SourceBlockGroup.BlockGroupStatusChanged -= OnSourceBlockGroupStatusChanged; + } + + foreach (var child in ChildGroups) + { + child.ClearStatusChangeSubscriptions(); + } + } } } diff --git a/Filtration/ViewModels/ToolPanes/BlockGroupBrowserViewModel.cs b/Filtration/ViewModels/ToolPanes/BlockGroupBrowserViewModel.cs index 8fd0da0..e84cbba 100644 --- a/Filtration/ViewModels/ToolPanes/BlockGroupBrowserViewModel.cs +++ b/Filtration/ViewModels/ToolPanes/BlockGroupBrowserViewModel.cs @@ -107,6 +107,14 @@ namespace Filtration.ViewModels.ToolPanes private ObservableCollection RebuildBlockGroupViewModels(bool showAdvanced) { + if (BlockGroupViewModels != null) + { + foreach (var viewModel in BlockGroupViewModels) + { + viewModel.ClearStatusChangeSubscriptions(); + } + } + // This assumes that there will only ever be a single root node. return new ObservableCollection (