代码之家  ›  专栏  ›  技术社区  ›  Corey Ogburn

在已经绑定的列表框中绑定变量?

  •  0
  • Corey Ogburn  · 技术社区  · 16 年前

    我真的不知道如何命名这个问题,但是我需要一些帮助来绑定到列表框。

    我有一个对象,它包含(除其他信息外)2个需要绑定到一个列表框中的属性。其中一个是对象的可观察集合,称为层,另一个属性持有点、线或多边形的枚举值,称为空间类型。这些将用作地图应用程序的图例。我已经将层绑定到了一个列表框,没问题,但是在listbox.itemTemplate中,我需要将单个变量spatialType绑定到列表框中的每个项。我遇到的问题是,当我在列表框中尝试绑定时,我能访问的唯一变量是每个层的属性,我不能访问包含层的原始绑定类的任何属性(以及所需的空间类型属性)。

    我该怎么做才能在不弄乱一个好的MVVM体系结构的情况下将这段信息绑定到itemtemplate中呢?

    2 回复  |  直到 16 年前
        1
  •  0
  •   Goblin    16 年前

    您可以在视图中有一个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>
    

    希望这有帮助。

        2
  •  0
  •   Corey Ogburn    16 年前

    我最后做的是使用findancestor获取绑定中更高“层”的数据上下文:

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