Ist der Zugriff auf das ViewModel in der CodeBehind-immer gegen das MVVM-pattern?

Einer Sache bin ich mir wirklich nicht sicher ist, wie Sie richtig zu pass-Maus-events an das ViewModel. Es ist die Art und Weise der Bindung löst mit der Interaktivität Dateiendung wie zum Beispiel in: WPF-Veranstaltung verbindlich die Sicht und ViewModel?

Aber dies hat uns nicht die MouseEventArgs-meines Wissens, und diese Lösung erscheint nicht sehr elegant zu mir.

Was wäre also die richtige Lösung? Eine Möglichkeit ist das registrieren eines Ereignisses und verarbeiten es in der code-behind, z.B.:

    private void ListBox_PreviewMouseDown(object sender, System.Windows.Input.MouseEventArgs e)
    {
        var listbox = sender as ListBox;

        if (listbox == null)
            return;

        var vm = listbox.DataContext as MainViewModel;

        if (vm == null)
            return;

        //access the source of the listbox in viewmodel
        double x = e.GetPosition(listbox).X;
        double y = e.GetPosition(listbox).Y;
        vm.Nodes.Add(new Node(x, y));
    }

Hier nehme ich an, dass die listbox die ItemsSource gebunden ist an die vm.Nodes-Eigenschaft. Also nochmal die Frage: ist es der richtige Weg, es zu tun? Oder gibt es einen besseren?

  • Wie willst du das lösen ähnliche Aufgaben mit Daten Vorlagen?
  • Dies funktioniert, indem Sie mit EventSetters wie in stackoverflow.com/questions/1800595/... ich habe es gerade ausprobiert, und es scheint zu funktionieren.
InformationsquelleAutor DerPrzem | 2014-01-11
Schreibe einen Kommentar