1

私はやや初心者なので、バインディングに関してはかなり不安定です。かなり長い間検索してきましたが、必要な場所にたどり着く例が見つかりません。

監視可能なコレクションにバインドされた DataGrid があります。これは、いくつかのプロパティを含むカスタム クラスのコレクションです (そのうちの 1 つは、それ自体が監視可能なコレクションです)。ユーザーがテキストを DataGrid に入力すると、Observable コレクションが更新されます。ユーザーが DataGrid の行を右クリックして、親の監視可能なコレクション内のアイテムの監視可能なコレクション プロパティから生成されたアイテムを含むコンテキスト メニューを取得できるようにしたいと考えています。

簡単にするために、私の DataGrid は InputItemList にバインドされています。これは、InputItem の Observable Collection です。

ObservableCollection(Of InputItem) としての InputItemList

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 型のプロパティを作成します。たとえば、CurrentlySelectedInputItem という名前を付けます

次に、それを DataGrids SelectedItem にバインドします。

次に、必要な itemsource をバインドします。

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

メニュー項目の使用法について 100% 確信があるわけではありませんが、それが目的の drawing_List にバインドする方法です。必要に応じて変更できるはずです。

于 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 に答える