Grelha do PAM: MouseRightButtonDown disparando antes da selecção ser mudada para a grelha. A causar o problema de sincronização

Tenho uma situação em que estou a construir um menu de contexto para um botão direito do rato, carregue num datagrid. O conteúdo do menu baseia-se na'linha seleccionada'. No entanto, quando eu carregar com o botão direito numa nova linha, o Evento Do MouseRightButtonDown está a disparar (e a construir o menu de contexto) antes do evento SelectionChanged disparar, o que significa que o menu de contexto está a ser construído para o contexto de dados da linha anterior.

Há alguma maneira de evitar isto? Forçar o MouseRightButtonDown a esperar pelo A selecção foi mudada para ocorrer?

Devo usar um atraso na tarefa? Parece estranho.

Aqui está o código em questão:
private async void Grid_MouseRightButtonDown(object sender, MouseButtonEventArgs e)
        {
//build context menu using "Grid.SelectedItem"

}

private async void Grid_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {

//process logic for item changing

}
Author: ghost_mv, 2017-05-01

1 answers

Infelizmente, o rato de antevisão para cima e os eventos normais do rato para cima irão disparar antes de a selecção ser feita. Sugiro que use a antevisão da noite, mas o evento e uma bandeira. Por Exemplo:

bool isRightClick = false;
private Employee selectedDataGridRow;
public Employee SelectedDataGridRow
{
    get
    {
        return selectedDataGridRow;
    }
    set
    {
        selectedDataGridRow = value;                
        NotifyPropertyChanged("SelectedDataGridRow");
        if (isRightClick)
        {
            <do your work here>
            isRightClick = false;
        }
    }
}

private void dgDatagrid_PreviewMouseRightButtonDown(object sender, 
             System.Windows.Input.MouseButtonEventArgs e)
    {
        isRightClick = true;
    }
Acho que isto será mais conveniente do que adicionar um atraso de tarefa ou algo parecido.
 0
Author: Raviraj Palvankar, 2017-05-02 05:03:29