views:

8

answers:

1

Hi,

I have the following context menu for rows of the Data Grid.

        <ContextMenu  x:Key="cm_rowMenu">
            <!--ContextMenu For Row-->
            <MenuItem Header="Edit Info."
                      Click="mnuEditInfo_Click"
                      />
            <MenuItem Header="Delete"
                      Click="mnuDeleteDevSoftware_Click"
                      />
            <MenuItem Header="Check In"
                      Click="mnuCheckIn_Click"
                      />
        </ContextMenu>

        <Style x:Key="DefaultRowStyle" TargetType="{x:Type dg:DataGridRow}">
            <Setter Property="ContextMenu" Value="{StaticResource cm_rowMenu}" />
        </Style>

However, I want to make the following change:

I want the menu items to be enabled/disabled based on properties of the dataGrid.SelectedItem. How do I do this ?

Best regards, MadSeb

A: 

Use commands:

<ContextMenu  x:Key="cm_rowMenu" DataContext="{Binding PlacementTarget.DataContext, RelativeSource={RelativeSource Self}}">
    <MenuItem Header="Edit Info." Command="{Binding EditCommand}"/>
</ContextMenu>
<Style x:Key="DefaultRowStyle" TargetType="{x:Type DataGridRow}">
    <Setter Property="ContextMenu" Value="{StaticResource cm_rowMenu}" />
</Style>

Model for rows:

public class ItemModel
{
    public ItemModel()
    {
        this.EditCommand = new SimpleCommand 
        { 
            ExecuteDelegate = _ => MessageBox.Show("Execute"), 
            CanExecuteDelegate = _ => this.Id == 1 
        };
    }
    public int Id { get; set; }
    public string Title { get; set; }
    public ICommand EditCommand { get; set; }
}
vorrtex