无法从ListBox中访问ViewModel

时间:2014-10-20 03:32:10

标签: c# wpf xaml mvvm listbox

我将一个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。

1 个答案:

答案 0 :(得分:2)

DataContext内的ItemTemplate实际上是项目本身。因此,在这种情况下,您必须使用RelativeSource向上走视觉树(到ListBox)并将Path更改为DataContext.ViewModel_DisplayString

 <TetxBlock Text="{Binding DataContext.ViewModel_DisplayString,
                         RelativeSource={RelativeSource AncestorType=ListBox}}"/>