可能是一个愚蠢的问题,但现在是:
<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>
答案 0 :(得分:1)
检查“输出”窗口,如果绑定失败,那里应该有一条消息。
答案 1 :(得分:1)
我已经忘记了这个问题,但万一有人遇到同样的问题,这就是答案:
问题是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>