Привязка свойства CommandParameter к свойству другого объекта - PullRequest
1 голос
/ 05 марта 2011

Вероятно, нубистский вопрос, но вот он:

<StackPanel Orientation="Horizontal">
    <TextBox x:Name="InsName" Margin="3" Width="180"/>
    <Button Command="cc:MyCommands.AddObject" CommandParameter="{Binding ElementName=InsName, Path=Text}" >Ok</Button>
</StackPanel>

Может кто-нибудь объяснить, почему CommandParameter, отправляемый при нажатии кнопки, всегда равен NULL?Как правильно привязать параметр к свойству другого элемента?

Заранее спасибо!

PS: большая часть кода, просто для придания некоторого контекста (весь код работает отлично, кромечасть, которую я показал выше)

<TreeView.ItemTemplate>
            <HierarchicalDataTemplate ItemsSource="{Binding Children}">
                <StackPanel Orientation="Horizontal" AllowDrop="{Binding IsGroupNode}" Drop="NodeDrop" DragEnter="NodeOver" DragLeave="NodeLeave">
                    <CheckBox Click="nodeChecked" IsChecked="{Binding IsChecked, Mode=TwoWay}" Visibility="{Binding IsObjectNode, Converter={StaticResource bool2vis}}" />
                    <TextBlock Text="{Binding Text}" Foreground="{Binding TextColor}" PreviewMouseLeftButtonDown="startDragging">
                        <TextBlock.ContextMenu>
                            <ContextMenu>
                                <MenuItem Header="Add Item">
                                    <StackPanel Orientation="Horizontal" IsEnabled="{Binding IsGroupNode}">
                                        <TextBox Name="InsName" Margin="3" Width="180"/>
                                        <Button Command="cc:MyCommands.AddObject" CommandParameter="{Binding ElementName=InsName, Path=Text}" Height="22" Width="30" IsDefault="True">Ok</Button>
                                    </StackPanel>
                                </MenuItem>
                                <MenuItem Header="Remove" Command="cc:MyCommands.RemoveObject" />
                                <Separator />
                                <MenuItem Command="cc:MyCommands.UncheckAll" IsEnabled="{Binding IsGroupNode}" />
                            </ContextMenu>
                        </TextBlock.ContextMenu>
                    </TextBlock>
                </StackPanel>
            </HierarchicalDataTemplate>
        </TreeView.ItemTemplate>

Ответы [ 2 ]

1 голос
/ 17 июня 2015

Я забыл об этом вопросе, но на случай, если кто-то столкнется с той же проблемой, вот ответ:

Проблема в том, что binding находится внутри DataTemplate, поэтому прямое связывание по имени не будет работать, поскольку объекты создаются динамически во время выполнения.

Возможным решением будет использование RelativeSrouce для перехода к родителю, а затем использование Path для возврата «вниз» к TextBox:

<StackPanel Orientation="Horizontal" IsEnabled="{Binding IsGroupNode}">
    <TextBox Name="InsName" Margin="3" Width="180"/>
    <Button Command="cc:MyCommands.AddObject" CommandParameter="{Binding RelativeSource={RelativeSource AncestorType=StackPanel}, Path=Children[0].Text}" Height="22" Width="30" IsDefault="True">Ok</Button>
</StackPanel>
1 голос
/ 05 марта 2011

Проверьте окно вывода, если привязка не удалась, там должно появиться сообщение.

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