C# Can';无法从列表框中访问ViewModel
我将ViewModel设置为wpf应用程序的最高级别DataContext,但当我跳入列表框时,似乎无法访问它,因为新的DataContext是列表的元素。下面是一个简单的例子C# Can';无法从列表框中访问ViewModel,c#,wpf,xaml,mvvm,listbox,C#,Wpf,Xaml,Mvvm,Listbox,我将ViewModel设置为wpf应用程序的最高级别DataContext,但当我跳入列表框时,似乎无法访问它,因为新的DataContext是列表的元素。下面是一个简单的例子 <Window.DataContext> <local:ViewModel/> </Window.DataContext> <StackPanel> <!--1D List--> <ListBox ItemsSource="{Bin
<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。在
ItemTemplate
中的DataContext
实际上就是项目本身。因此,在这种情况下,您必须使用相对资源
沿着可视树(到列表框
)并将路径
更改为数据上下文。ViewModel\u DisplayString
:
<TetxBlock Text="{Binding DataContext.ViewModel_DisplayString,
RelativeSource={RelativeSource AncestorType=ListBox}}"/>
您最好改用命令。我不认为您无法访问处理程序。这只是代码隐藏的一部分。通常,当我定义某个处理程序时,我只需在XAML代码中键入它的名称,然后右键单击它并选择导航到事件处理程序。我已经更新了这个问题,以便更清楚地了解问题的内容。