2014-10-20 67 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}}"/>