2014-10-20 68 views
0

我有一个ViewModel设置为我的WPF应用程序的最高级别的DataContext,但我似乎无法访问它当我跳进一个ListBox作为新的DataContext是列表的元素。下面是一个简单的例子。不能从列表框中的ViewModel

<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不在类中的项目上,因此该示例实际上并不适用于按钮单击。

无论如何,我有{Binding parent.selected_item}或类似的东西吗?我只需要能够从列表框中访问ViewModel。

+0

你最好使用'Command'代替。我不认为你不能访问处理程序。这只是代码背后的一部分。通常,当我定义一些处理程序时,我只需在XAML代码中输入其名称,然后右键单击它并选择*导航到事件处理程序*。 – 2014-10-20 03:53:17

+0

啊真的够了。我已经更新了这个问题,以便更清楚地询问问题。 – Coat 2014-10-20 04:36:50

回答

2

DataContext里面的ItemTemplate实际上是项目本身。因此,在这种情况下,你必须使用RelativeSource走上可视树(到ListBox),改变PathDataContext.ViewModel_DisplayString

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