WPF のバインドで INotifyPropertyChanged の無いソースがメモリに残る仕組み
INotifyPropertyChanged の無いソースに OneWay・TwoWay でバインドした画面を閉じると、.NET 10 ではウィンドウは回収されるが、ソースは PropertyDescriptor の登録表のキーとして残り、登録が外れるまで回収されない。
WPF と .NET による Windows デスクトップ開発の実践的な知見を、2 つの形で公開しています。 実装課題を掘り下げる技術記事と、その過程で作成したオープンソースのアプリ・ライブラリ・ツールです。 概要レベルの解説ではなく、実装の参照になる情報を求める開発者に向けています。
技術記事では WPF・XAML・C#・.NET のトピックを掘り下げ、各記事で前提と対象環境を明示し、対処法だけでなく挙動の原因や代替案とのトレードオフまでを扱います。 アプリケーションはその実践的な裏づけで、WPF を用いたサンプルアプリ・ライブラリ・ツールを、GitHub リポジトリへのリンク付きでオープンソースとして公開しています。
INotifyPropertyChanged の無いソースに OneWay・TwoWay でバインドした画面を閉じると、.NET 10 ではウィンドウは回収されるが、ソースは PropertyDescriptor の登録表のキーとして残り、登録が外れるまで回収されない。
ボタンから実行した AsyncRelayCommand の未捕捉の例外は既定で DispatcherUnhandledException に届き、FlowExceptionsToTaskScheduler 付きではビューモデルを残した計測で次の実行後の GC まで届かなかった。
ObservableValidator の必須チェックは起動直後の空欄にエラーを出さず、HasErrors で止めた保存ボタンも押せてしまう。HasErrors の False が未検証を含むことを実測で確かめ、ValidateAllProperties を呼ぶ場所を比べる。
WPF の標準コントロールを .NET 10 で動作させたデモアプリ。UI レイアウトやスタイルの参考にできます。
MessageBox のカスタムサンプルを生成できるツール。UI プロトタイピングや動作確認に便利です。
WPF 向けの軽量な XAML 拡張ライブラリ。BindableBase や RelayCommand といった MVVM の基盤を、プロジェクト参照、またはローカル/プライベートの NuGet フィード経由のパッケージとして利用できる形で提供します。利用側に第三者製の実行時依存を追加しません。
コピーしたファイルをフォルダー構成を維持したままペーストできる Windows ツール。タスクトレイ常駐とショートカット起動で、日常のファイル操作を効率化します。