我有点像新手,所以在绑定方面我很不稳定。我已经搜索了很长时间,但我找不到任何能让我到达我需要的地方的例子。
我有一个绑定到可观察集合的DataGrid。它是包含多个属性的自定义类的集合(其中一个属性本身是一个可观察的集合)。用户将文本输入到DataGrid中,并更新Observable集合。我希望用户能够右键单击DataGrid中的一行,并获取一个上下文菜单,其中包含从父可观察集合中项目的observable collection属性生成的项目。
为简单起见,我的DataGrid绑定到InputItemList,它是一个可观察的InputItem集合。
InputItemList as ObservableCollection(Of InputItem)
InputItem具有以下属性: Part_Number为String Drawing_List为ObservableCollection(Of DrawingItem)
DrawingItem具有以下属性: 修订为字符串 Drawing_Path为String
DataGrid通过ItemsSource绑定到InputItemList,并且正常工作。 对于我的生活,我无法创建一系列绑定到Drawing_List集合的菜单项
这是我的XAML的简化版本???我需要帮助的绑定:
<DataGrid x:Name="mw_DataGrid" ItemsSource="{Binding Source={StaticResource InputItemList}}">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Path=Part_Number}" CanUserReorder="False" CanUserResize="False" CanUserSort="False" Header=""/>
<DataGrid.Columns>
<DataGrid.ContextMenu>
<ContextMenu>
<MenuItem Header="Open Obsolete Revision" ItemsSource=????>
<MenuItem.ItemContainerStyle>
<Style>
<Setter Property="MenuItem.Header" Value="{Binding Path=Revision}"/>
<Setter Property="MenuItem.Command" Value="{StaticResource cmdOpenObsPDF}" />
<Setter Property="MenuItem.CommandParameter" Value="{Binding Path=Drawing_Path}" />
</Style>
</MenuItem.ItemContainerStyle>
</MenuItem>
</ContextMenu>
</DataGrid.ContextMenu>
</DataGrid>
答案 0 :(得分:0)
在视图模型上创建一个InputItem类型的属性,该属性表示当前选定的行。将其命名为例如CurrentlySelectedInputItem
然后将其绑定到DataGrids SelectedItem。
然后绑定您想要的itemsource:
<MenuItem Header="Open Obsolete Revision" ItemsSource="{Binding CurrentlySelectedItem.DrawingList}">
不是100%确定菜单项目用法 - 但是这是如何绑定到您所追求的drawing_List,您应该能够修改它以满足您的需要。
答案 1 :(得分:0)
好的,我明白了。 我实际上已经不得不这样做了,完全忘记了!
显然,使用上下文菜单在树中搜索有些困难。 我不记得完整的解释,但这是适用于我的XAML:
<MenuItem Header="Open Obsolete Revision" ItemsSource="{Binding Path=PlacementTarget.SelectedItem.DrawingList, RelativeSource={RelativeSource AncestorType={x:Type ContextMenu}}}">