2011-03-05 40 views
1

可能是一個noobish問題的性質,但在這裏它是:綁定CommandParameter財產到另一個對象

<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

我已經忘記了這個問題,但以防萬一有人遇到同樣的問題,這裏的答案:

的問題是,bindingDataTemplate裏面,所以直接結合通過名字將無法正常工作,因爲對象是在運行時動態創建的。

一個可能的解決方案是使用一個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

檢查輸出窗口,如果綁定失敗,應該有那裏有一條消息。

+0

沒什麼輸出窗口... – 2011-03-05 18:35:38

+0

上@ Master_T你的代碼似乎適用於我(命令除外) - 命令是否正確觸發?代碼的上下文是什麼(僅在XAML,控制模板,數據模板等)? – 2011-03-05 18:49:45

+0

該命令觸發並正確路由,它會到達指定的處理程序方法,但是當它執行時,參數設置爲null。我將用更全面的代碼部分編輯第一篇文章。 – 2011-03-06 10:03:11

相關問題