Как мне установить 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>