12

名前によるバインディングの自己参照と RelativeSource による自己参照の違いは何ですか?

例えば:

<!-- Self referential via name -->
<Window ...
    x:Name="This"
    DataContext="{Binding Path=Data, ElementName=This}"/>

<!-- Self referential via RelativeSource -->
<Window ...
    x:Name="This"
    DataContext="{Binding Path=Data, RelativeSource={RelativeSource Self}}"/>

私のプロジェクトでは、それらは同じように動作するように見えますが、ウィンドウで直接使用しています。これは、入力が少ないため、前者をすぐに好むことを意味します。

RelativeSource の唯一の利点は、(たとえば) 広く使用されているスタイルで自己参照できることですか? または、追加のセマンティックの違いがありますか?

4

3 に答える 3

8

警告: WPF ウィザードではありません

例のように WPF 要素に直接バインドしている場合、違いはありません。"This" は解決可能で、Self と同じアイテムにバインドされます。

私の疑いは、Style などの構成要素を介してバインドしている場合に違いがあるということです。その場合、実際にバインドしたいのは、スタイルが適用される要素です。この場合、RelativeSource Self はその要素を提供しますが、"this" は単に Style インスタンスを提供します。

于 2009-03-10T15:30:33.117 に答える
2

コントロールの名前を頻繁にリファクタリングする傾向がある場合は、自己参照形式を使用する方が望ましい場合があります。それ以外の場合は、パフォーマンスに基づいて呼び出します。小さなテストを作成し、どのタイプのバインディングがより優れているかを確認し、そのタイプを選択します。パフォーマンスの違いがごくわずかである場合は、全体的な外観や入力時間など、他の保守性に関する考慮事項を確実に考慮します。また、自己参照フォームを使用する場合、要素に名前を付ける必要がないことを忘れないでください。そのため、マウスとキーボードの間の入力とコンテキストの切り替えの量を比較するときに、ElementName フォームに追加の命名要件を含める必要があります。

個人的には、リファクタリングを容易にする目的と、バインドを設定するときに要素名を追加するために XAML ドキュメント内を移動する必要がないという事実のために、参照バインディング形式を好みます。

于 2009-10-15T15:09:00.220 に答える
-1

なぜそれらの間に違いがあると思いますか?同じ要素を参照する2つの方法であるため、それらは同一であるべきだと思います。

于 2009-03-10T15:21:04.997 に答える