Как мне установить CommandParameter в XAML?

У меня есть следующий XAML:

   <dxg:GridControl Name="theGrid" DataSource="{Binding Path=Groupings}">
       <dxg:GridControl.ContextMenu>
           <ContextMenu>
               <MenuItem x:Name="gridprint" Command="{Binding Path=GridPrintCommand}"/>
           </ContextMenu>
       </dxg:GridControl.ContextMenu>
   </dxg:GridControl>

Когда GridPrintCommand выполняется, его параметр для метода GridPrintCommand.Execute(param) равен нулю. Я хочу установить параметр для сетки управления. Я могу сделать это в коде, как это:

gridprint.CommandParameter = theGrid;

Это отлично работает. Но я пытаюсь установить то же самое (CommandParameter) в XAML, и я просто не могу сделать это правильно! Все, что я помещаю, приводит к BindingExpressionError или нулевому параметру. Что мне не хватает?

2 ответа

Решение

Попробуйте использовать это:

<MenuItem x:Name="gridprint"
    CommandParameter="{Binding PlacementTarget, RelativeSource=
         {RelativeSource FindAncestor, AncestorType={x:Type ContextMenu}}}" />

ContextMenus не являются частью обычного VisualTree WPF, поэтому вы должны связать, используя PlacementTarget, чтобы получить объект, к которому присоединено ContextMenu.

Я считаю, что это должно быть так

<dxg:GridControl Name="theGrid" DataSource="{Binding Path=Groupings}">
  <dxg:GridControl.ContextMenu>
    <ContextMenu>
      <MenuItem x:Name="gridprint"
        Command="{Binding Path=GridPrintCommand}"
        CommandParameter="{Binding ElementName=theGrid}"
      />
    </ContextMenu>
  </dxg:GridControl.ContextMenu>

Другие вопросы по тегам