Binden Sie den DoubleClick-Befehl von der DataGrid-Zeile an die VM

Ich habe ein Datagrid, und nicht, wie mein workaround, um das Feuer ein Doppel-klicken Sie auf den Befehl auf meinem viewmodel für die angeklickt (aka ausgewählt) Zeile.

Anzeigen:

   <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;
        }
    }

Ich möchte, um loszuwerden, der anzeigen im Zusammenhang mit code (das mit dem dependency-Objekt und der visual tree Helfer) meiner Ansicht Modell, wie diese Pausen Testbarkeit irgendwie. Aber auf der anderen Seite auf diese Weise vermeide ich, dass etwas passiert, wenn der Benutzer nicht auf eine Zeile klicken, sondern auf den header zum Beispiel.

PS: ich habe versucht, einen Blick auf beigefügten Verhalten, aber ich kann nicht download von Skydrive zu arbeiten, also eine "eingebaute" Lösung wäre am besten.

InformationsquelleAutor der Frage metacircle | 2013-07-02

Schreibe einen Kommentar