次の方法で共有


XAML データ バインディング診断

XAML プロジェクトに取り組む開発者は、多くの場合、アプリケーションで XAML データ バインディングエラーを検出して解決する必要があります。 Visual Studio 2019 バージョン 16.8 以降 と Visual Studio 2022 には、アプリケーションのデバッグ中にこれらの迷惑なデータ バインディングエラーを見つけるのに役立つツールが用意されています。 一般的なバインディング エラーの例を次に示します。

  • 存在しないプロパティ名へのバインド: {Binding Wrong.Name}
  • 列挙型が必要な場合にブール値にバインドするなど、間違った型の値にバインドすること: Visibility="{Binding IsVisible}"

これらのバインドはリフレクションを使用して実行時に計算されるため、XAML エディターでは必ずしもそれらをキャッチできないので、ビルドは引き続き成功します。 エラーは実行時にのみ発生します。

XAML データ バインディングについては、次の記事で説明します。

バインドエラーは、常に Visual Studio のデバッグ出力ウィンドウに書き込まれています。 しかし、デバッグ出力内のバインディング失敗を見逃すのは簡単です。デバッグには他の情報が含まれており、バインディング失敗を視界から外してしまうことがあります。 デバッグ出力ウィンドウ内の WPF バインドエラーの例を次に示します。

バインドエラーを含む出力ウィンドウのスクリーンショット。

バインドの失敗は、ウィンドウの上部から数百行離れている可能性があり、テキストでは、エラーが発生したバインディングが正確に示されないため、それについて考えて検索する必要があります。

これで、XAML バインド エラー ツール ウィンドウを使用すると、失敗したバインディングと、エラーごとに関連するデータ (XAML 内のファイルの場所など) を明確に確認できます。 さらに、失敗したバインディングにフォーカスを設定して XAML エディターを検索、並べ替え、さらには開くことで、エラーを調査するのに役立つ多くの機能があります。

XAML バインド エラー ツール ウィンドウのスクリーンショット。

これらの行をダブルクリックすると、次の図に示すように、バインディングのソース XAML が開きます。

XAML エディターのバインド例のスクリーンショット。

XAML バインディング エラー ツール ウィンドウ

XAML バインド エラー ツール ウィンドウは、デバッグ中に使用できます。 これを開くには、[ デバッグ>Windows>XAML バインド エラー] に移動します。

[デバッグ] メニューの [XAML バインド エラー] オプションのスクリーンショット。

または、アプリケーション ツール バー の [バインドエラー ] ボタンを選択します。 アイコンの横にある番号は、ツール ウィンドウに表示されるバインド エラーの数を示しています。

[バインドエラー] ボタンを示すアプリ内ツール バーのスクリーンショット。

ツール ウィンドウにバインドエラーがない場合、アイコンは灰色で表示され、その横に数字が表示されません。 これは、アプリケーションの実行中に役立ちます。 アイコンが数字で赤に変わる場合は、アイコンをクリックすると、ツール ウィンドウにすばやく移動して、どのようなバインド エラーが発生したかを確認できます。 Visual Studio ツール ウィンドウを見守る必要はありません。 バインドが失敗すると、アイコンの状態に即時の状態が表示されます。

エラーのないバインドエラー ボタンを示すアプリ内ツール バーのスクリーンショット。

ライブ ビジュアル ツリー ツール ウィンドウにも同様のアイコンが表示されます。

ライブ ビジュアル ツリー ツール ウィンドウ内の [バインドエラー] ボタンのスクリーンショット。

XAML バインド エラー ツール ウィンドウのすべてのコンポーネントの説明を次に示します。

XAML バインド エラー ツール ウィンドウのスクリーンショット。

  • 上部のツール バーには、次のようなボタンがあります。
    • エラーの一覧をクリアします。これは、アプリに新しいページを表示しようとしている場合に、バインドエラーが表示されるかどうかを確認する場合に便利です。 新しいデバッグ セッションを開始すると、一覧が自動的にクリアされます。
    • 選択した行を削除する: エラーが修正されたか、関連しない場合は、一覧から削除できます。 バインドが再度失敗すると、削除された行が再び表示されます。
    • すべてのフィルターをクリアする: テキストの検索など、リストにフィルターがある場合は、このボタンでフィルターがクリアされ、完全なリストが表示されます。
    • 重複を結合する: 多くの場合、同じバインドが項目テンプレート内にある場合、1 行に何度も失敗します。 [ 重複の結合 ] ボタンが選択されている場合 (周囲にアウトラインが表示されます)、重複するすべてのエラーが 1 つの行として表示されます。 [カウント] 列には、エラーが発生した回数が表示されます。
  • 右上隅の [ バインドエラーの検索 ] ボックスを使用すると、特定のテキストを含むエラーのみにエラーをフィルター処理できます。
  • テーブルの列は、次の順序で表示されます。
    • 行がエラーまたは警告用であるかどうかを示すアイコン。
    • XAML で失敗した<>に移動する場合に{Binding}山かっこを示すアイコンがサポートされています。 「サポートされているプラットフォーム」セクションを参照してください。
    • データ コンテキスト: これはバインディングのソース オブジェクトの型名です
    • バインド パス: これはバインドのプロパティ パスです
    • ターゲット: このオプションは、バインディングの値が設定されている型とプロパティの名前です。
    • ターゲットの種類: これは、バインディングのターゲット プロパティの予期される型です。
    • 説明: この列には、バインディングに対して正確に失敗した内容に関する詳細情報が含まれています。
    • ファイルおよびプロジェクト: 既知の場合、これはバインドが定義されている XAML 内の場所です。
  • 行または複数の選択した行を右クリックすると、コンテキスト メニューが表示され、列の表示/非表示やグループ化のための標準オプションが表示されます。 その他のオプションは次のとおりです。
    • 行または単一の列からすべてのテキストをクリップボードにコピーします。
    • 元のエラーをコピーすると、デバッグ出力ウィンドウに表示されたテキストがコピーされます。
    • ビュー ソースは、選択した 1 行の XAML のバインド ソースに移動します。
    • 列をリセットすると、列の表示と並べ替えに対するすべての変更が元に戻され、最初に表示されていたものにすばやく戻ります。

リストを並べ替えるには、任意の列ヘッダーをクリックします。 追加の列でもう一度並べ替えるには、 Shift キーを押しながら別の列ヘッダーをクリックします。 表示する列と非表示にする列を選択するには、ショートカット メニューから [列の表示 ] を選択します。 列の表示順序を変更するには、列ヘッダーを左または右にドラッグします。

行をダブルクリックするか Enter キーを押してソースに移動した後、 F8 キーまたは Shift キーを押しながら F8 キーを押して、バインドエラーの一覧を下または上に移動できます。 これは、一覧を表示する Visual Studio の他のペインと同様です。

サポートされているプラットフォーム

ほとんどの XAML プラットフォームは、バインドエラーがデバッグ出力に書き込まれる場合にサポートされます。 一部のプラットフォームでは、ソースへの移動を可能にする追加のソース情報がデバッガーに提供されます。

プラットフォーム Supported サポートされているソースに移動する
WPF .NET Framework イエス いいえ
WPF .NET 5.0 RC2 以降 イエス イエス
UWP イエス いいえ
WinUI3 デスクトップ イエス いいえ
MAUI (マルチプラットフォーム アプリ UI) イエス いいえ
Xamarin 4.5.0.266-pre3 以上 イエス イエス
4.5.0.266-pre3 より前の Xamarin いいえ いいえ

ソースへの移動をサポートするには、Visual Studio で XAML ホット リロード機能を有効にする必要があります。 [ツール>オプション] ウィンドウで、[>Debugging>XAML ホット リロード] セクションを展開し、[XAML ホット リロードを有効にする] チェック ボックスをオンにします。

[ツール オプション] ウィンドウの XAML ホット リロード オプションのスクリーンショット。

ソースへの移動をサポートするには、Visual Studio で XAML ホット リロード機能を有効にする必要があります。 [ツール>オプション] ダイアログで、[デバッグ>XAML ホット リロード] セクションを展開し、[XAML ホット リロードを有効にする] チェック ボックスをオンにして、[OK] を選択します

[ツール オプション] ダイアログの [XAML ホット リロード] オプションのスクリーンショット。

ソースへの移動は、XAML ソース ファイルで定義されているバインドに対してのみ機能し、コードを使用して作成される場合は機能しません。 ソースへの移動をサポートする行を明確に確認できます。 2 番目の列に山かっこアイコンがない場合、次のスクリーンショットの強調表示された行など、ソースへの移動はサポートされていません。

ソースの場所のない XAML バインドエラーを示すスクリーンショット。

.NET Framework の WPF の場合、データ バインディングエラーを検出して表示するには、XAML バインドエラーペインのデバッグ出力にデータ バインディングエラーを表示する必要があります。 [ツールオプション] ウィンドウの [すべての設定]、デバッグ出力ウィンドウWPF トレース設定] セクションの下にある [データ バインディング] 設定を構成します。

[データ バインディング] オプションを設定する方法を示すスクリーンショット。

.NET Framework の WPF の場合、データ バインディングエラーを検出して表示するには、XAML バインドエラーペインのデバッグ出力にデータ バインディングエラーを表示する必要があります。 [ツール>] ダイアログの [デバッグ>] セクションの [WPF トレース設定] グループで、データ バインディング設定を構成します。

WPF トレース設定グループの [データ バインディング] オプションのスクリーンショット。

設定値が Off または Critical の場合、データ バインディング エラーはデバッグ出力に書き込まれず、検出できません。 .NET 5、.NET 6 以降の WPF では、データ バインディングの出力設定はエラー一覧に影響しません。