Как передать объект текущего узла в команду в telerik RadtreeviewItem в wpf

Я использую элемент управления Kendo Telerik RadTreeview в WPF. У меня есть функциональность, которая для каждого узла RadTreeViewItem я добавляю пользовательскую кнопку, которая появляется при отображении события команды.

Я добавил кнопку и использовал ее в HierarchicalDataTemplate как показано ниже

<HierarchicalDataTemplate x:Key="BuildingStructure"
                              ItemsSource="{Binding Levels, Mode=TwoWay}"
                              ItemContainerStyle="{StaticResource levelNodeStyle}">
        <Grid HorizontalAlignment="Stretch">
            <Grid.ColumnDefinitions>
                <ColumnDefinition  Width="3*"/>
                <ColumnDefinition  Width="*"/>
            </Grid.ColumnDefinitions>
            <TextBlock Grid.Column="0" 
                       Width="250"
                       Text="{Binding StructureName , Mode=TwoWay}" 
                       HorizontalAlignment="Left"
                       Panel.ZIndex="2"/>
            <Button
                Canvas.Left="10" 
                Canvas.Bottom="20"
                Panel.ZIndex="1"
                BorderThickness="0"
                BorderBrush="Transparent"
                Background="Transparent"
                 Foreground="White"
                HorizontalAlignment="Left"
                Grid.Column="1"
                VerticalAlignment="Stretch"
                Command="{Binding DataContext.AddLevelRadTreeCommand, RelativeSource={RelativeSource AncestorType=telerik:RadTreeView}}" 
                CommandParameter="{Binding ElementName=radTreeView}"
                Margin="0 2 0 5">

                <Image
                    Width="20"
                    Height="20"
                   Source="/Project;component/Resources/Images/03-Add.png"/>
            </Button>
        </Grid>


    </HierarchicalDataTemplate>

То, что я хочу, это то, что при командном событии мне нужно добавить параметр команды, который будет передавать текущий RadTreeviewItem объект данных, который назначается этому узлу, как показано ниже

StructId:1,
StructName:'Building A'....and so on...

1 ответ

Решение

Когда вы формируете данные в элементы управления, текст данных элемента управления становится моделью представления, которую вы создаете. Все, что есть в уровнях, становится текстовым текстом созданного предмета.

DataContext наследуется по визуальному дереву.

Следовательно, текст данных кнопки является элементом дерева.

Где у вас есть

 CommandParameter="{Binding ElementName=radTreeView}"

Вы хотите, чтобы текст данных содержал кнопку. Что должно быть что-то вроде:

CommandParameter="{Binding DataContext, RelativeSource={RelativeSource Self}}"

Думая об этом немного больше, это также может быть

CommandParameter="{Binding}"
Другие вопросы по тегам