0

これは、WPF で複雑なコントロールを開発するときによく遭遇する問題です。

一部のプロパティを複数レベルの親にバインドしたいと考えています。

私は現在、これを RelativeSource と TemplatedParent で使用しています:

Value="{Binding PropertyToBind, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}"

しかし、これで、直接の親にバインドするだけで済み、4 つのレベルを持っています。

オブジェクトの 4 つのレベルを削除できません。それらは複雑なコントロールです...

たとえば、最初のレベルはジョイスティック コントロールです。私のジョイスティックには、上下に移動するスライダー コントロール (第 2 レベル) があります。私の Slider には、 Button ( 3rd level ) があります。ボタンには、レベル 1 (ジョイスティック) のプロパティにバインドするテキスト (第 4 レベル) があります。

私がしていることは、テキストをボタンのプロパティにバインドしてから、ボタンのプロパティをスライダーのプロパティにバインドするなど、ジョイスティックにバインドすることです。場合によっては、カスタム コントロールを作成する必要があります (バインドできるプロパティを追加します)。

これは私のシナリオではなく、単なる例です (はい、これではおそらくいくつかのレベルを削除できますが、私の場合はそうではありません) 私は答えを望んでいません: これまたはこのオブジェクトを削除します...

複数のレベルに直接バインドする方法はありますか? 各レベルは Style の ControlTemplate です。

WPF 4、.NET 4.0、Blend 4、Visual Studio 2010 を使用しています

4

2 に答える 2

2

これを行うべきではありません。カプセル化が壊れ、不要な依存関係が導入されます。あなたが説明することは、行く方法です:

私がしていることは、テキストをボタンのプロパティにバインドしてから、ボタンのプロパティをスライダーのプロパティにバインドするなどです..

于 2012-08-29T12:48:17.507 に答える
1

バインディングで の他の順列を試しましたRelativeSourceか? 具体的には、あなたRelativeSource={RelativeSource FindAncestor, AncestorType={x:Type SomeType}}の上にある特定のコントロールを見つけるために使用できます。これは、シナリオに適しているように見えます。

于 2012-08-29T12:49:41.757 に答える