Привязка из пункта контекстного меню к родительскому элементу управления - PullRequest
11 голосов
/ 07 октября 2010

У меня есть элемент управления, в котором есть команда SaveToClipboardCommand. Я хочу связать команду элемента контекстного меню с этой командой, чтобы при нажатии на нее выполнялась команда копирования в буфер обмена.

<Control x:Name="Control">
    <Control.ContextMenu>
        <ContextMenu>
            <MenuItem Command={"Bind to SaveToClipboardCommand here"} Header="Some Header" />
        </ContextMenu>
    </Control.ContextMenu/>
</Control>

Элемент управления (для аргумента) определяется следующим образом:

partial class Control
{
      private ICommand _saveToClipboard;
      public ICommand SaveToClipboardCommand
      {
          get
          {
              if (_saveToClipboard == null)
              {
                  _saveToClipboard = new RelayCommand(
                         x=> SaveToClipboard());
              }
              return _saveToClipboard;
          }
     }
}

Я пытался использовать привязки на основе RelativeSource и ElementName, но оба не удаются. Что я пытаюсь сделать даже возможно?

Спасибо!

Ответы [ 2 ]

19 голосов
/ 12 октября 2010

РЕДАКТИРОВАТЬ (после показа того, как отображается элемент управления): Ну, ContextMenu несколько сложнее, потому что на самом деле он не является частью одного и того же визуального дерева.Попробуйте сделать это:

<MenuItem Command="{Binding Path=PlacementTarget.SaveToClipboardCommand,
    RelativeSource={RelativeSource AncestorType=ContextMenu}}"/>

Оригинальный ответ

Представлена ​​ли эта команда как открытое свойство элемента управления?Если команда фактически отображается в зависании ViewModel DataContext элемента управления, выполните следующие действия:

Command={Binding ElementName=Control, Path=DataContext.SaveToClipboardCommand}

Можете ли вы показать, как эта команда отображается в данный момент?

0 голосов
/ 07 октября 2010
Command={Binding ElementName=Control, Path=SaveToClipboardCommand}

HTH

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