0

我有一个显示类似于地理地图的视图,我UserControls在这个视图中有一些视图,每个视图都显示有关 DataContext 的相关信息,但每个视图都从不同的角度来看,可以这么说。

然后,我的目标是将鼠标悬停在一个 UserControl 上,突出显示每个 UserControl 中的一个功能,当然这个突出显示的视觉风格将特定于每个 UserControl。

例如,如果我在地图中有一条路径,并且在图表中绘制了它的海拔剖面,我想将鼠标悬停在海拔剖面上,在该图形上动态显示一条垂直线,同时一些标记将是动态的显示在地图中,反之亦然。

我可以通过在视图本身中使用一些数值来做到这一点,这将是每个用户控件中的双向数据绑定,但存在一些概念问题:

  • 经典数据绑定在 ViewModel 中预设了一个属性,但是“鼠标高亮”功能是特定于 View 的(它不代表对象状态),我绝对不希望将这样的属性添加到 ViewModel,这会污染它带有特定于视图的代码;
  • 创建 UserControl 时,它们的 DataContext 是 ViewModel 或其某些属性。需要将部分 UserControl 的 DataContext 更改为不同的对象似乎不是一个建议或简单的方法。
  • 我可以稍微破解一下并在具有折叠可见性的视图中创建一个Slider,并将 ElementBinding 与每个 UserControl 一起使用,但仍然如此,我将如何在视图和包含的 UserControl 之间进行 ElementBinding?

所以,主要问题是:

如何将视图中的单个属性(不是在 ViewModel 中!)绑定到给定视图中包含的许多用户控件?

如果一切都是一个单一的整体视图,那么使用 ElementBinding 对我来说是显而易见的选择,但是对于不同的类(一个视图和许多用户控件)我不知道如何进行 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 回答