2010-01-19 8 views
5

czekałem na ten na przepełnienie stosu, ale nie mógł znaleźć odpowiedź na to jeszcze tak mam nadzieję, że isnt duplikat ...MVVM Pattern - W jaki sposób można wywołać ICommand lub CommandReference w kodzie za

Mam aplikację korzystającą z wzorca MVVM, lubię utrzymywać porządek w czystości, ale czasami mały kod za nim wydaje się czystszy niż obejście XAML.

Chcę się dowiedzieć, czy możliwe jest wywołanie komendy z elementu codebehind.

mam skonfigurować odwołanie polecenia moim zdaniem już (patrz niżej)

<local:CommandReference 
       x:Key="CommandReferencePreviewReportsCommand" 
       Command="{Binding PreviewReportsCommand}" /> 

Co chcę zrobić jest w stanie wyzwolić odwołanie polecenia lub ICommand z kodu C# za zdania . Czy ktoś wie, jak to zrobić?

Odpowiedz

5

Wystarczy powołać się na komendę z opóźnieniem kodu:

var parameter = null; // can also be any object you'd like to use as a parameter 
this.PreviewReportsCommand.Execute(parameter); 
+0

Dzięki Mark, ale to nie wydają się działać. Chciałbym wywołać polecenie z kodu z tyłu widoku, który wydaje się nie być w stanie "zobaczyć" tego polecenia? Założę się, że ten kod działałby dobrze, gdybym umieścił go pod ViewModel ... ale potrzebuję czegoś, aby uzyskać dostęp za widokiem. –

+0

Dzięki, Mark ... Musiałem zrobić kilka drobnych poprawek, żeby działały ... ale postawiłeś mnie na właściwej drodze. –

+0

Widzę, że działało - dobrze :) Nie było dla mnie jasne, z jakiego pliku z kodem trzeba to zrobić. –

3

Dobra ... Mark Seemann - Ty się mnie na właściwe tory ... więc podniósł swój głos ...

Nie zdawałem sobie sprawy, że kontekst danych może być typem rzutowania, który spowoduje, że polecenia w ViewModel będą widoczne ... więc poniższy kod działa w mojej sytuacji ... a ogólne rozwiązanie byłoby podobne.

((ViewModel.PrintSelectViewModel) this.DataContext).PreviewReportsCommand.Execute(null); 
Powiązane problemy