У меня тоже иногда возникает эта проблема с MenuItems
внутри ContextMenu
. Я предполагаю, что ContextMenu
не может найти правильный DataContext.
Моим решением для этого является класс BindingProxy, который выглядит следующим образом:
public class BindingProxy : Freezable
{
public static readonly DependencyProperty DataProperty = DependencyProperty.Register(
"Data", typeof (object), typeof (BindingProxy), new UIPropertyMetadata(null));
/// <summary>
/// This Property holds the DataContext
/// </summary>
public object Data
{
get { return GetValue(DataProperty); }
set { SetValue(DataProperty, value); }
}
protected override Freezable CreateInstanceCore()
{
return new BindingProxy();
}
}
В ресурсах вашего представления (UserControl или Window) вы должны добавить прокси, например:
<codeBase:BindingProxy x:Key="proxy" Data="{Binding}"/>
И в вашем MenuItem вы можете использовать его с:
<MenuItem Header="Remove" Command="{Binding Source={StaticResource proxy}, Path=Data.ValidateAllCommand}"/>