@@ -162,9 +162,10 @@ public override void Dispose()
162
162
{
163
163
base . Dispose ( ) ;
164
164
165
- var columnHostItems = ColumnHost . Items . OfType < BladeItem > ( ) . Select ( blade => blade . Content as Frame ) ;
165
+ var columnHostItems = ColumnHost . Items . OfType < BladeItem > ( ) . Select ( blade => blade . Content as Frame ) . ToList ( ) ;
166
166
foreach ( var frame in columnHostItems )
167
167
{
168
+ // Unsubscribe all event handlers BEFORE disposing to prevent race conditions
168
169
if ( frame ? . Content is ColumnShellPage shPage )
169
170
{
170
171
shPage . ContentChanged -= ColumnViewBrowser_ContentChanged ;
@@ -179,6 +180,7 @@ public override void Dispose()
179
180
if ( frame ? . Content is UIElement element )
180
181
element . GotFocus -= ColumnViewBrowser_GotFocus ;
181
182
183
+ // Dispose content AFTER unsubscribing all event handlers
182
184
if ( frame ? . Content is IDisposable disposable )
183
185
disposable . Dispose ( ) ;
184
186
}
@@ -207,9 +209,7 @@ public void DismissOtherBlades(int index)
207
209
{
208
210
var frame = ColumnHost . ActiveBlades [ index + 1 ] . Content as Frame ;
209
211
210
- if ( frame ? . Content is IDisposable disposableContent )
211
- disposableContent . Dispose ( ) ;
212
-
212
+ // Unsubscribe event handlers BEFORE disposing to prevent race conditions
213
213
if ( ( frame ? . Content as ColumnShellPage ) ? . SlimContentPage is ColumnLayoutPage columnLayout )
214
214
{
215
215
columnLayout . ItemInvoked -= ColumnViewBase_ItemInvoked ;
@@ -220,6 +220,10 @@ public void DismissOtherBlades(int index)
220
220
( frame ? . Content as UIElement ) . GotFocus -= ColumnViewBrowser_GotFocus ;
221
221
( frame ? . Content as ColumnShellPage ) . ContentChanged -= ColumnViewBrowser_ContentChanged ;
222
222
223
+ // Dispose content AFTER unsubscribing event handlers
224
+ if ( frame ? . Content is IDisposable disposableContent )
225
+ disposableContent . Dispose ( ) ;
226
+
223
227
ColumnHost . Items . RemoveAt ( index + 1 ) ;
224
228
ColumnHost . ActiveBlades . RemoveAt ( index + 1 ) ;
225
229
}
0 commit comments