XAML データ バインディング診断
XAML プロジェクトを操作する開発者は、アプリケーションの XAML データ バインディング エラーを検出して解決しなければならないことがよくあります。 Visual Studio 2019 バージョン 16.8 以降と Visual Studio 2022 のツールを使用して、アプリケーションのデバッグ中にこのような厄介なデータ バインディング エラーを見つけられるようになりました。 一般的なバインド エラーの例を次に示します。
- 存在しないプロパティ名にバインドしている:
{Binding Wrong.Name}
- 間違った型の値にバインドしている (列挙が必要な場合のブール値へのバインドなど):
Visibility="{Binding IsVisible}"
このようなバインディングは実行時にリフレクションを使用して計算されるため、XAML エディターが常にそれをキャッチすることはできず、ビルドは成功します。 このエラーは、実行時にのみ発生します。
XAML データ バインディングについては、次の記事で説明しています。
- WPF の場合: データ バインディングの概要 - WPF .NET
- UWP の場合: データ バインディングの概要 - UWP アプリケーション
- Xamarin.Forms の場合: Xamarin.Forms データ バインディング - Xamarin
バインド エラーは、常に Visual Studio のデバッグ出力ウィンドウに書き込まれています。 しかし、デバッグ出力のバインド エラーは見逃しやすいものです。他のデバッグ情報が含まれているため、バインド エラーがビューの外にスクロールされてしまうためです。 デバッグ出力ウィンドウ内の WPF バインド エラーの例を次に示します。
バインド エラーは、ウィンドウの上部から何百もの行に及ぶことがあります。また、テキストはエラーしたバインディングを正確に示すものではないので、これを考慮して検索する必要があります。
これが、[XAML バインド エラー] ツール ウィンドウを使用して、エラーがあったバインドと、それぞれのエラーの関連データ (XAML 内のファイルの場所など) を明確に確認できるようになりました。 さらに、検索、並べ替え、さらにはエラーがあったバインドにフォーカスが設定された XAML エディターの起動によってエラーを調査できる便利な機能が多数あります。
これらの行をダブルクリックすると、次の図に示すように、バインディングのソース XAML が開きます。
[XAML バインド エラー] ツール ウィンドウ
[XAML バインド エラー] ツール ウィンドウは、デバッグ中に表示されます。 それを開くには、[デバッグ]>[ウィンドウ]>[XAML バインド エラー] の順に移動します。
または、[アプリケーション] ツールバーでバインド エラーのボタンを選択します。 アイコンの横にある数字は、ツール ウィンドウに表示されるバインド エラーの数を示しています。
ツール ウィンドウにバインド エラーがない場合、アイコンの横に数字が表示されずにグレーで表示されます。 これは、アプリケーションの実行中に役立ちます。 アイコンが赤色に変わり、数字が表示されている場合は、それをクリックしてツール ウィンドウにすばやく移動し、どのようなバインド エラーが発生したかを確認します。 Visual Studio ツール ウィンドウに注意を払う必要はありません。 バインドにエラーがあると、アイコンですぐに表示されます。
同様のアイコンが、[ライブ ビジュアル ツリー] ツール ウィンドウにも表示されます。
次に、[XAML バインド エラー] ツール ウィンドウのすべてのコンポーネントについて説明します。
- 上部のツールバーには、次のようなボタンがあります。
- エラーの一覧をクリア: これは、アプリに新しいページを表示しようとしているときに、バインド エラーを表示するかどうかを確認したい場合に便利です。 新しいデバッグ セッションを開始すると、一覧が自動的にクリアされます。
- 選択した行を削除: エラーが修正された場合、または関連性がない場合は、一覧から削除できます。 バインドで再度エラーが発生した場合、削除された行は再び表示されます。
- すべてのフィルターをクリア: テキストの検索などで、一覧にフィルターがある場合、このボタンによってそれらがクリアされ、完全な一覧が表示されます。
- [重複を結合]: 多くの場合、同じバインドが 1 つの項目テンプレート内にあると、1 行で何度もエラーが発生します。 [重複を結合] ボタンが選択されている場合 (その周りにアウトラインが表示されます)、重複するすべてのエラーが 1 つの行として表示されます。 [カウント] 列には、エラーが発生した回数が表示されます。
- 上の隅にある [バインド エラーの検索] ボックスを使用すると、エラーをフィルター処理して、特定のテキストを含むものだけに絞り込むことができます。
- テーブルの列は、順番に次のように表示されます。
- 行にエラーまたは警告があるかどうかを示すアイコン。
- XAML でエラーがあった
<>
への移動がサポートされる場合、山かっこ{Binding}
を示すアイコン。 「サポートされているプラットフォーム」のセクションを参照してください。 - [データ コンテキスト]: バインドのソース オブジェクトの型名です
- Binding.Source に関する記事を参照してください
- [バインド パス]: バインドのプロパティ パスです
- Binding.Path に関する記事を参照してください
- [ターゲット]: バインドの値が設定される型とプロパティ名です。
- BindingExpressionBase.Target と BindingExpressionBase.TargetProperty に関する記事を参照してください
- [ターゲット型]: バインドのターゲット プロパティの予期される型です。
- BindingExpressionBase.TargetProperty に関する記事を参照してください
- [説明]: この列には、バインドの何が失敗したかに関する詳細情報が含まれています。
- [ファイル]、[行]、および [プロジェクト]: 既知の場合、これは、バインドが定義されている XAML 内の場所です。
- 行または複数の選択行を右クリックすると、コンテキスト メニューが表示され、標準オプションとして、列の表示と非表示を切り替えたり、グループ化したりできます。 その他に、次のようなオプションがあります。
- 行または 1 つの列のすべてのテキストをクリップボードにコピーする。
- [元のエラーをコピー] により、デバッグ出力ウィンドウに表示されたテキストがコピーされます。
- [ソースの表示] は、1 つの選択した行について、XAML 内のバインディング ソースに移ります。
- [列のリセット] を使用すると、列の表示と並べ替えに対するすべての変更が元に戻り、最初に表示された内容にすばやく戻ることができます。
一覧を並べ替えるには、任意の列ヘッダーをクリックします。 並べ替えに使用する列を追加するには、Shift キーを押しながら、他の列ヘッダーをクリックします。 どの列を表示し、どの列を表示しないのかを指定するには、ショートカット メニューの [列の表示] を選びます。 列の表示順を変更するには、列ヘッダーを左右にドラッグします。
行をダブルクリックするか、Enter キーを押してソースに移動した後、F8 キーまたは Shift+F8 キーを押すと、バインド エラーの一覧内を上下に移動できます。 これは、一覧を表示する Visual Studio の他のペインに似ています。
サポートされているプラットフォーム
バインド エラーがデバッグ出力に書き込まれる場合、ほとんどの XAML プラットフォームがサポートされます。 一部のプラットフォームでは、ソースへの移動を可能にする追加のソース情報がデバッガーに提供されます。
プラットフォーム | サポートあり | サポートされているソースへの移動 |
---|---|---|
WPF .NET Framework | はい | いいえ |
WPF .NET 5.0 RC2+ | はい | はい |
UWP | はい | いいえ |
WinUI3 デスクトップ | はい | いいえ |
MAUI (Multi-platform App UI) | はい | いいえ |
Xamarin 4.5.0.266-pre3+ | はい | はい |
Xamarin before 4.5.0.266-pre3 | いいえ | いいえ |
ソースに移動するには、Visual Studio で [XAML ホット リロード] オプションが有効になっている必要があります。 このオプションは、[ツール]>[オプション]>[デバッグ] ダイアログにあります。
ソースへの移動は、XAML ソース ファイルで定義されているバインドに対してのみ機能します。コードによって作成される場合は対象になりません。 ソースへの移動がサポートされている行を明確に確認できます。 次のスクリーンショットの強調表示された行のように、2 番目の列に山かっこアイコンがない場合は、ソースへの移動はサポートされていません。
.NET Framework の WPF では、データ バインディング エラーを検出して表示するために、[XAML バインド エラー] ペインのデバッグ出力に表示される必要があります。 このオプションは、[ツール]>[オプション]>[デバッグ]>[出力ウィンドウ]>[WPF トレース設定] ダイアログにあります。 設定が [オフ] または [クリティカル] の場合、データ バインディング エラーはデバッグ出力に書き込まれず、検出できません。 .NET 5、.NET 6、およびそれ以降の WPF では、データ バインディングの出力設定はエラー一覧には影響しません。