Есть ли способ передать имя treeViewItem в качестве параметра команды? - PullRequest
0 голосов
/ 31 октября 2019

Я создаю простое древовидное представление с привязкой к коллекции. Я хочу отображать полную информацию об элементе коллекции в виде списка, когда выбран элемент дерева. Похоже на Windows File Explorer. Проблема в том, что я не могу привязать выбранный элемент дерева к команде.

Попытка привязать команду к событию SelectedItemChanged с параметром имени элемента дерева - не работает. Попробовал это с простым событием - становится громоздким и ломает шаблон MVVM. Должен быть элегантный способ решить эту проблему, поскольку то, что я пытаюсь сделать, действительно широко распространено в разных приложениях.

<TreeView Grid.Row="1" Background="AliceBlue" ItemsSource="{Binding TopPanelNodes}" Name="TopTreeView" SourceUpdated="TopTreeView_SourceUpdated" >
    <TreeView.ItemTemplate>
        <HierarchicalDataTemplate ItemsSource="{Binding Path=Nodes}">
            <StackPanel HorizontalAlignment="Left" Orientation="Horizontal" IsEnabled="False">
                <TextBlock Text="{Binding Name}" >
                </TextBlock>
            </StackPanel>
        </HierarchicalDataTemplate>
    </TreeView.ItemTemplate>

    <i:Interaction.Triggers>
        <i:EventTrigger EventName="SelectedItemChanged">
            <i:InvokeCommandAction Command="{Binding UpdateInspectorCommand }" CommandParameter=???                                                    />
        </i:EventTrigger>
    </i:Interaction.Triggers>                        
</TreeView>

Я бы хотел передать имя дерева в качестве параметра команды вместо ??? в моем коде выбранный элемент древовидной структуры будет идентифицирован по имени, чтобы я мог получить соответствующую информацию и привязать ее к списку.

1 Ответ

0 голосов
/ 01 ноября 2019

Решено с помощью RelativeSource.

CommandParameter = "{Binding Path = SelectedItem, RelativeSource = {RelativeSource Mode = FindAncestor, AncestorType = {x: Type TreeView}}}"

Работает нормально.

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