DataGrid到Observable集合的自定义类对象问题

时间:2012-11-30 15:38:45

标签: wpf vb.net data-binding

我有点像新手,所以在绑定方面我很不稳定。我已经搜索了很长时间,但我找不到任何能让我到达我需要的地方的例子。

我有一个绑定到可观察集合的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>

2 个答案:

答案 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}}}">