Связывание ContextMenu CommandParamater? - PullRequest
1 голос
/ 20 июля 2011

Я пытаюсь связать commandParamater моего ContextMenu элемента с другим элементом в форме, однако, независимо от того, что я пытаюсь сделать, commandParamater всегда null.

Может кто-нибудь показать мне, как правильно связать commandParamater моего пункта контекстного меню?

Что у меня есть:

<TreeView.ItemTemplate>
    <HierarchicalDataTemplate ItemsSource="{Binding Path=Files}">
       <Grid>
          <Grid.ContextMenu>
              <ContextMenu>
                 <MenuItem Header="Rename Folder" 
                           Command="{Binding Path=ToggleControlVisability}" 
                          CommandTarget="{Binding ElementName=FolderEditor}" 
                          CommandParameter="{Binding ElementName=FolderEditor}">
                 </MenuItem>
               </ContextMenu>
          </Grid.ContextMenu>

          <Label Content="{Binding Path=FolderName}"></Label>

          <StackPanel Name="FolderEditor" Orientation="Horizontal" 
                      Visibility="Hidden">
              <TextBox Text="{Binding Path=FolderName}"></TextBox>
          </StackPanel>
        </Grid>
     </HierarchicalDataTemplate>
</TreeView.ItemTemplate>

1 Ответ

1 голос
/ 20 июля 2011

Это очень распространенная проблема, встречающаяся в WPF;Само контекстное меню не является частью того же визуального дерева, что и элемент управления, для которого оно было определено, из-за этого невозможно использовать привязки ElementName или RelativeSource.

Я также недавно сталкивался с этой проблемой, и решение, использующее Tag и PlacementTarget, отлично сработало для меня.

Вот несколько постов с различными решениями этой проблемы (кроме одного предложенного CodeNaked) -

Как установить CommandTarget для MenuItem внутри ContextMenu?

http://www.sevensteps.com/binding-contextmenu-commands-in-wpf-to-the-controls-viewmodel.ashx

http://www.ikriv.com/blog/?p=434

...