管理対象外のリソースを参照しているか、ディスパッチャタイマーで処理が経過したなどのイベントハンドラがあると、ビューモデルが正しく処分されるようにするにはどうすればよいですか。最初のケースでは、ファイナライザーはオプションですが、理想的ではありませんが、後者では決して呼び出されません。ビューモデルに添付されたビューがなくなったことをどのようにして知ることができますか?WPFで使い捨てビューモデルを使用するには?
11
A
答えて
5
可能ワン、ではないが完璧なソリューション:
、ビューのコンストラクタで、この拡張メソッドを使用して、ビューモデルにIDisposableを実装します。
public static void HandleDisposableViewModel(this FrameworkElement Element)
{
Action Dispose =() =>
{
var DataContext = Element.DataContext as IDisposable;
if (DataContext != null)
{
DataContext.Dispose();
}
};
Element.Unloaded += (s, ea) => Dispose();
Element.Dispatcher.ShutdownStarted += (s, ea) => Dispose();
}
7
私は、次の手順を実行して、これを達成:
- App.xamlからStartupUriプロパティを削除します。
次のように私のアプリクラスの定義:
public partial class App : Application { public App() { IDisposable disposableViewModel = null; //Create and show window while storing datacontext this.Startup += (sender, args) => { MainWindow = new MainWindow(); disposableViewModel = MainWindow.DataContext as IDisposable; MainWindow.Show(); }; //Dispose on unhandled exception this.DispatcherUnhandledException += (sender, args) => { if (disposableViewModel != null) disposableViewModel.Dispose(); }; //Dispose on exit this.Exit += (sender, args) => { if (disposableViewModel != null) disposableViewModel.Dispose(); }; } }
関連する問題
- 1. wpf mvvmコマンドを使用してビューモデル間でパラメータを渡す
- 2. WPFビューモデルの正しい使い方
- 3. WPFアプリケーションでサービスロケータパターンを使用する場合のビューモデルの範囲
- 4. WPFビューモデルでリレーショナルテーブルを使用する方法
- 5. SharePointオブジェクトで使い捨てを使用する(Webパーツ)
- 6. wpfを使用して同じビュー上のビューモデルを切り替えるmvvm
- 7. MVVMとビューモデル通信を使用したWPFウィンドウのモーダルダイアログ
- 8. WPFビューモデルを使用してソースを変更してフレーム内ナビゲーションを行う
- 9. 使い捨てクラス
- 10. WPFでGroupBoxを使用するには?
- 11. AutoMapperを使用してモデルプロパティをビューモデルにマップする方法
- 12. i18nモデルと一緒にビューモデルを使用するには?
- 13. ビューモデルを使用してコントローラにデータが渡されない
- 14. 別のビューで使用される基本ビューモデルから派生したビューモデルを使用するMVC
- 15. 使い捨てRxJava 2.0をAndroidにインストールするには?
- 16. ビューモデルからコードビハインドにアクセスするWPF
- 17. WPF MVVM:ビューモデルからリストビューオブジェクトにアクセスする
- 18. ビューモデルとAjaxでHTML.DropDownListヘルパーを使用
- 19. ビューモデルを使用しているときのデータベースの更新
- 20. WPF MVVM - 祖先ビューモデル
- 21. C#、WPFを使用してWinPEでFileOpenDialogとImageを使用するには
- 22. HwndHostを使用しないでWPFを使用するGoogle Earth
- 23. WPFはコードの背後にオブジェクトを初期化し、そのオブジェクトをビューモデルで使用します
- 24. MVVM Lightのメッセンジャーを使用してビューモデル間で値を渡す
- 25. WPFでプロパティを使用してカスタムシェイプを作成するには?
- 26. 使い捨て可能なクラスの使い捨てフィールドは自動的に廃棄されますか
- 27. Prism - WPF/Silverlightビューモデルの再利用
- 28. FXCop:「使い捨てのフィールドを持つ型は使い捨てでなければなりません」
- 29. ASP .NET MVC 3:EditorTemplateで汎用ビューモデルを使用する方法
- 30. ビューモデルを使用してRazor View Engineをホスティングする
私は作品を考える解決策を持っているとして、私は自分の質問に答えましたが、私は誰かが私にはるかに良いを与えることを願っています私は受け入れられた答えとしてマークすることができます。 – ForbesLindesay