1

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

我有一个绑定到可观察集合的 DataGrid。它是一个包含多个属性的自定义类的集合(其中一个属性本身就是一个可观察的集合)。用户将文本输入 DataGrid 并更新 Observable 集合。我希望用户能够右键单击 DataGrid 中的一行并获得一个上下文菜单,其中包含从父可观察集合中项目的可观察集合属性生成的项目。

为简单起见,我的 DataGrid 绑定到 InputItemList,它是 InputItem 的 Observable 集合。

InputItemList 作为 ObservableCollection(Of InputItem)

InputItem 具有属性: Part_Number as String Drawing_List as ObservableCollection(Of DrawingItem)

DrawingItem 具有属性: Revision as String Drawing_Path as 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>
4

2 回答 2

0

在您的视图模型上创建一个 InputItem 类型的属性,它表示当前选定的行。例如,将其命名为 CurrentSelectedInputItem

然后将其绑定到 DataGrids SelectedItem。

然后绑定你想要的itemsource:

<MenuItem Header="Open Obsolete Revision" ItemsSource="{Binding CurrentlySelectedItem.DrawingList}">

不是 100% 确定菜单项的使用 - 但这是如何绑定到您所追求的绘图列表,您应该能够修改它以满足您的需要。

于 2012-11-30T17:11:35.917 回答
0

好的,我想通了。我实际上必须这样做一次并且完全忘记了!

显然,使用上下文菜单在树中搜索有些困难。我不记得完整的解释,但这是适用于我的 XAML:

<MenuItem Header="Open Obsolete Revision" ItemsSource="{Binding Path=PlacementTarget.SelectedItem.DrawingList, RelativeSource={RelativeSource AncestorType={x:Type ContextMenu}}}">
于 2012-12-03T14:31:31.850 回答