0

地理的な地図に似たものを表示するビューがあり、このビュー内にいくつかUserControlsあります。それぞれに DataContext に関する関連情報が表示されますが、それぞれ異なる視点から表示されます。

次に、私の目標は、マウスを 1 つの UserControl の上に置いて、すべての UserControl の機能を強調表示することですが、もちろん、この強調表示の視覚的なスタイルは各 UserControl に固有です。

たとえば、マップにパスがあり、その標高プロファイルがグラフにプロットされている場合、標高プロファイルの上にマウスを移動して、そのグラフの上に垂直線を動的に表示し、同時にいくつかのマーカーを動的に表示したいと考えています。マップに表示され、その逆も同様です。

ビュー自体で数値を使用することでこれを行うことができます。これは、各 UserControls で双方向のデータバインドになりますが、概念的な問題がいくつかあります。

  • 従来のデータ バインディングは ViewModel のプロパティを前提としていますが、「マウス ハイライト」機能は View に固有のものであり (オブジェクトの状態を表すものではありません)、そのようなプロパティを ViewModel に追加して汚染することは絶対にしたくありません。ビュー固有のコードを使用。
  • UserControls が作成されると、それらの DataContext は ViewModel またはそのプロパティの一部になります。UserControl の一部の DataContext を別のオブジェクトに変更する必要があることは、推奨できる方法でも簡単な方法でもないようです。
  • 少しハックして、Slider折りたたみ表示で View を作成し、各 UserControl で ElementBinding を使用することもできますが、それでも、View と含まれる UserControl の間で ElementBinding を行うにはどうすればよいでしょうか?

したがって、主な質問は次のとおりです。

ビュー (ViewModel ではありません!) の単一のプロパティを、その特定のビューに含まれる多くの UserControls にバインドするにはどうすればよいですか?

すべてが単一のモノリシック ビューである場合、ElementBinding を使用することは私にとって明らかな選択ですが、異なるクラス (1 つのビューと多くの UserControls) では、ElementBinding の実行方法がわかりません。私が欲しいもの。

4

1 に答える 1

1

私はあなたの質問を見逃しているかもしれませんが、依存関係プロパティをビューに追加して、含まれている UserControls にバインドしてみませんか?

<YourView x:Name="yourView">
 <YourUserControl SomePropertyOfYourUserControl="{Binding ElementName=yourView, Path="YourView's DependencyProperty"/>
 <YourSecondUserControl SomePropertyOfYourSecondUserControl="{Binding ElementName=yourView, Path="YourView's DependencyProperty"/>
</YourView>

--

編集して回答を完成させます:

あなたが言った :

従来のデータ バインディングは、ViewModel のプロパティを前提としています

..しかし、必ずしもそうする必要はありません。ビューの依存関係プロパティにバインドすることもできるからです (そのコードビハインドで)。

于 2013-12-12T10:56:17.843 に答える