我将一个ViewModel设置为我的wpf应用程序的最高级DataContext但是当我跳转到ListBox时我似乎无法访问它,因为新的DataContext是列表的元素。下面是一个简单的例子。
<Window.DataContext>
<local:ViewModel/>
</Window.DataContext>
<StackPanel>
<!--1D List-->
<ListBox ItemsSource="{Binding my_list}">
<ListBox.ItemTemplate>
<DataTemplate>
<!--Individual Elements-->
<TetxBlock Text="{Binding ViewModel_DisplayString}"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</StackPanel>
当按钮点击时,该示例实际上无法工作,因为ViewModel_ClickFunction不在类中的项目上。
那么我还有{绑定parent.selected_item}或类似的东西吗?我只需要能够从ListBox中访问ViewModel。
答案 0 :(得分:2)
DataContext
内的ItemTemplate
实际上是项目本身。因此,在这种情况下,您必须使用RelativeSource
向上走视觉树(到ListBox
)并将Path
更改为DataContext.ViewModel_DisplayString
:
<TetxBlock Text="{Binding DataContext.ViewModel_DisplayString,
RelativeSource={RelativeSource AncestorType=ListBox}}"/>