Установите для CommandParameter другую привязку, чем для команд «Связывание RelativeSource» - PullRequest
0 голосов
/ 02 апреля 2020

Я хочу сделать привязку CommandParameter к другой модели представления, тогда команда. Привязка команд выходит из коллекции древовидного представления в ViewModel, которая содержит «Элементы» - коллекцию. Но CommandParameter должен передать ViewModel из «Children». Если я просто делаю {Binding}, он передает неправильную ViewModel. (тот, где находится коллекция "Предметов")

<TreeView 
                ItemsSource="{Binding Items}">
                <TreeView.ItemTemplate>
                    <HierarchicalDataTemplate ItemsSource="{Binding Children}">
                        <StackPanel Orientation="Horizontal" 
                                    CanHorizontallyScroll="True">
                            <CheckBox VerticalAlignment="Center" 
                                      IsChecked="{Binding IsSelected}"/>
                            <TextBlock VerticalAlignment="Center" 
                                       FontSize="14"
                                       Text="{Binding Name}"/>
                        </StackPanel>
                    </HierarchicalDataTemplate>
                </TreeView.ItemTemplate>
                <TreeView.ContextMenu>
                    <ContextMenu>
                        <MenuItem Header="Set Script-Root"
                                  Command="{Binding Path=DataContext.SomeCommand, RelativeSource={RelativeSource AncestorType=ContextMenu}}"
                                  CommandParameter="{Binding HOW_TO_VIEWMODEL_of_TREEVIEW-ITEMS???}"/>
                    </ContextMenu>
                </TreeView.ContextMenu>
            </TreeView>

1 Ответ

0 голосов
/ 02 апреля 2020

Чтобы это работало, вам нужно вместо этого установить ContextMenu на TreeViewItem.

Это даст вам возможность установить:

CommandParameter="{Binding}"

, который будет DataContext из TreeViewItem, и:

Command="{Binding RelativeSource={RelativeSource AncestorType={x:Type TreeView}}, Path=DataContext.SomeCommand}"

, который будет получить DataContext из TreeView.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...