У меня есть Datagrid и мне не нравится мой метод обхода для запуска команды двойного щелчка на моей модели просмотра для выбранной (выбранной) строки.
Вид:
<DataGrid EnableRowVirtualization="True"
ItemsSource="{Binding SearchItems}"
SelectedItem="{Binding SelectedItem}"
SelectionMode="Single"
SelectionUnit="FullRow">
<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseDoubleClick">
<cmd:EventToCommand Command="{Binding MouseDoubleClickCommand}" PassEventArgsToCommand="True" />
</i:EventTrigger>
</i:Interaction.Triggers>
...
</DataGrid>
ViewModel:
public ICommand MouseDoubleClickCommand
{
get
{
if (mouseDoubleClickCommand == null)
{
mouseDoubleClickCommand = new RelayCommand<MouseButtonEventArgs>(
args =>
{
var sender = args.OriginalSource as DependencyObject;
if (sender == null)
{
return;
}
var ancestor = VisualTreeHelpers.FindAncestor<DataGridRow>(sender);
if (ancestor != null)
{
MessengerInstance.Send(new FindDetailsMessage(this, SelectedItem.Name, false));
}
}
);
}
return mouseDoubleClickCommand;
}
}
Я хочу избавиться от кода, связанного с представлением (с объектом зависимостей и помощником визуального дерева) в моей модели просмотра, так как это как-то нарушает возможности тестирования. Но, с другой стороны, я избегаю того, что что-то происходит, когда пользователь не нажимает на строку, но, например, на заголовок.
PS: Я попытался взглянуть на приложенное поведение, но я не могу загрузить с Skydrive на работе, поэтому лучше было бы использовать встроенное решение.