WPF - 绑定已绑定ListBox中的变量?

时间:2010-06-11 20:22:21

标签: data-binding binding

我真的不知道如何标题这个问题,但我需要一些帮助来绑定到ListBox。

我有一个对象,它包含(在其他信息中)需要绑定在一个ListBox中的2个属性。其中一个是ObservableCollection对象,称为Layers,另一个属性包含Point,Line或Polygon的枚举值,称为SpatialType。这些是充当地图应用程序的图例。我已将Layers绑定到ListBox,没问题,但在ListBox.ItemTemplate中,我需要将单个变量SpatialType绑定到ListBox中的每个Item。我遇到的问题是,当我尝试在ListBox内部绑定时,我可以访问的唯一变量是每个Layer的属性,我无法访问包含层的原始绑定类的任何属性(和所需的SpatialType属性)。

如何在不破坏好的MVVM架构的情况下将这条信息绑定到ItemTemplate中,我该怎么办?

2 个答案:

答案 0 :(得分:0)

您可以在视图中有一个ObjectDataProvider,它是datacontext的基础,并且ObjectInstance指向您的viewmodel。然后您可以像这样从ItemTemplate绑定:

<UserControl.Resources>
     <ObjectDataProvider x:Key="Data"/>
     <DataTemplate x:Key="Template">
         <TextBlock Text="{Binding SpatialType,Source={StaticResource Data}}/>
     </DataTemplate>
</UserControl.Resources>
<Grid DataContext={Binding Source={StaticResource Data}}>
     <ListBox ItemsSource="{Binding Layers}" ItemTemplate="{StaticResource Template}"/>
</Grid>

希望这有帮助。

答案 1 :(得分:0)

我最终做的是使用FindAncestor在绑定中获取更高“层”的DataContext:

Binding="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListBox}}, Path=DataContext.LayerSymbolization.SpatialType, Mode=TwoWay}"