Как передать объект текущего узла в команду в telerik RadtreeviewItem в wpf - PullRequest
0 голосов
/ 22 мая 2019

Я использую элемент управления 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 Ответ

0 голосов
/ 22 мая 2019

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

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

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

Где у вас есть

 CommandParameter="{Binding ElementName=radTreeView}"

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

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

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

CommandParameter="{Binding}"
...