У меня та же задача, поэтому вот мое решение:
прикрепить обработчик для события MouseLeftButtonDown в datagrid, используя AddHandler dataGrid.AddHandler (UIElement.MouseLeftButtonDownEvent, new MouseButtonEventHandler (DataGrid_MouseLeftButtonDown), true);
сохранить SelectedIndex в приватной переменной
private int prevSelectedIndex;
void DataGrid_MouseLeftButtonDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
{
if (prevSelectedIndex != -1 && prevSelectedIndex == dataGrid.SelectedIndex)
{
dataGrid.SelectedIndex = -1;
}
prevSelectedIndex = dataGrid.SelectedIndex;
}
если вы хотите повторно использовать эту логику, вы можете создать Поведение для типа DataGrid
Добавить ссылку на сборку System.Windows.Interactivity, добавить класс DataGridSecondClickUnselectBehavior
public class DataGridSecondClickUnselectBehavior : Behavior<DataGrid>
{
protected override void OnAttached()
{
base.OnAttached();
AssociatedObject.AddHandler(UIElement.MouseLeftButtonDownEvent, new MouseButtonEventHandler(AssociatedObject_MouseLeftButtonDown), true);
}
private int prevSelectedIndex;
void AssociatedObject_MouseLeftButtonDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
{
if (prevSelectedIndex != -1 && prevSelectedIndex == AssociatedObject.SelectedIndex)
{
AssociatedObject.SelectedIndex = -1;
}
prevSelectedIndex = AssociatedObject.SelectedIndex;
}
protected override void OnDetaching()
{
base.OnDetaching();
AssociatedObject.RemoveHandler(UIElement.MouseLeftButtonDownEvent, new MouseButtonEventHandler(AssociatedObject_MouseLeftButtonDown));
}
}
Теперь, после того как вы скомпилируете решение в blend, вы можете добавить это поведение просто перетаскиванием из Активы-> Поведения в элемент управления DataGrid