WPF と WinRT では、動作が Detach メソッドを確実に呼び出さないことはよく知られています。メモリ リークを回避する唯一の方法は、AssociatedObject の Unloaded イベントをサブスクライブし、すべてのイベントをアンフックすることです ( example )。
これまでのところ、動作します。
しかし、(私がリンクしたブログ エントリにコメントした他の誰かがそうであったように) この方法では、アンロードされたビヘイビアが再びアタッチされることは決してないことに気付きました。たとえば、MenuFlyout を取り上げます。MenuFlyoutItem にアタッチされた動作がある場合、MenuFlyoutItem が閉じられるとアンロードされます。メニューを再度開くと、再接続されません。
これは、他の UserControls でも発生します。すべてのコントロールが新たに再作成されますが、WinRT アプリであるページから別のページに移動して再び戻ると、動作が「失われます」。ナビゲートすることで多くのコントロールが再作成される WinRT アプリでそれらを使用する方法がわかりません。
これに知られている解決策はありますか?