{"id":3265,"date":"2020-09-03T07:58:40","date_gmt":"2020-09-03T05:58:40","guid":{"rendered":"http:\/\/www.capri-soft.de\/blog\/?p=3265"},"modified":"2020-09-03T07:58:40","modified_gmt":"2020-09-03T05:58:40","slug":"wpf-mvvm-was-ist-der-sinn-hinter-relaycommand-und-wozu-braucht-man-relaycommand","status":"publish","type":"post","link":"https:\/\/www.capri-soft.de\/blog\/?p=3265","title":{"rendered":"WPF MVVM: Was ist der Sinn hinter RelayCommand und wozu braucht man RelayCommand?"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">Problemfeld<\/h2>\n\n\n\n<p>RelayCommand (s) erf\u00fcllen den Zweck von Actions \/ Delegates und sind somit Funktionszeiger die es erlauben, zu einem sp\u00e4teren Zeitpunkt eine Methode aufzurufen.<\/p>\n\n\n\n<p>Sie implementieren das Interface ICommand, welches von den WPF Controls genutzt wird, um bei Bedarf die Execute()-Methode aufzurufen. D.h. die Execute()-Methode soll nur dann aufgerufen werden, wenn das WPF Control das Ereignis tats\u00e4chlich ausl\u00f6st und nicht bereits zur Bindung. <\/p>\n\n\n\n<p>Ohne RelayCommands m\u00fcsste man f\u00fcr jeden Command eine eigene Klasse schreiben, welche vom Interfache ICommand erbt. Sie helfen somit Code einzusparen. <\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Verwendung in einem MVVM Pattern<\/h2>\n\n\n\n<p>H\u00e4ufige Verwendung: In einer XAML Datei wird ein Button definiert, der an einen RelayCommand gebunden wird, welcher zu einem sp\u00e4teren Zeitpunkt aufgerufen werden soll:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"474\" height=\"119\" data-attachment-id=\"3266\" data-permalink=\"https:\/\/www.capri-soft.de\/blog\/?attachment_id=3266\" data-orig-file=\"https:\/\/i0.wp.com\/www.capri-soft.de\/blog\/wp-content\/uploads\/2020\/09\/XAMLButton.png?fit=615%2C155&amp;ssl=1\" data-orig-size=\"615,155\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"XAMLButton\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/www.capri-soft.de\/blog\/wp-content\/uploads\/2020\/09\/XAMLButton.png?fit=474%2C119&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/www.capri-soft.de\/blog\/wp-content\/uploads\/2020\/09\/XAMLButton.png?resize=474%2C119&#038;ssl=1\" alt=\"\" class=\"wp-image-3266\" srcset=\"https:\/\/i0.wp.com\/www.capri-soft.de\/blog\/wp-content\/uploads\/2020\/09\/XAMLButton.png?w=615&amp;ssl=1 615w, https:\/\/i0.wp.com\/www.capri-soft.de\/blog\/wp-content\/uploads\/2020\/09\/XAMLButton.png?resize=300%2C76&amp;ssl=1 300w\" sizes=\"auto, (max-width: 474px) 100vw, 474px\" \/><\/figure>\n\n\n\n<p>Das ViewModel, welches die View instanziert, muss einen RelayCommand &#8222;PerformCalibration&#8220; definieren, der erst aufgerufen wird, wenn der Button geklickt wird (Relay) und nicht sofort bei der Bindung an den ButtonCommand.<\/p>\n\n\n\n<p>F\u00fcr diesen Zweck beinhaltet das ViewModel, welches die View instanziert, eine Funktion die den RelayCommand zur\u00fcckgibt:<br>&nbsp;<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"474\" height=\"99\" data-attachment-id=\"3267\" data-permalink=\"https:\/\/www.capri-soft.de\/blog\/?attachment_id=3267\" data-orig-file=\"https:\/\/i0.wp.com\/www.capri-soft.de\/blog\/wp-content\/uploads\/2020\/09\/RelayCommandMethod.png?fit=483%2C101&amp;ssl=1\" data-orig-size=\"483,101\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"RelayCommandMethod\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/www.capri-soft.de\/blog\/wp-content\/uploads\/2020\/09\/RelayCommandMethod.png?fit=474%2C99&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/www.capri-soft.de\/blog\/wp-content\/uploads\/2020\/09\/RelayCommandMethod.png?resize=474%2C99&#038;ssl=1\" alt=\"\" class=\"wp-image-3267\" srcset=\"https:\/\/i0.wp.com\/www.capri-soft.de\/blog\/wp-content\/uploads\/2020\/09\/RelayCommandMethod.png?w=483&amp;ssl=1 483w, https:\/\/i0.wp.com\/www.capri-soft.de\/blog\/wp-content\/uploads\/2020\/09\/RelayCommandMethod.png?resize=300%2C63&amp;ssl=1 300w\" sizes=\"auto, (max-width: 474px) 100vw, 474px\" \/><\/figure>\n\n\n\n<p>Der Button ruft die Funktion &#8222;Execute&#8220; des implementierten RelayCommands auf, wenn er geklickt wird.<\/p>\n\n\n\n<p>Da RelayCommands &#8222;Actions&#8220; sind, haben Sie keinen R\u00fcckgabewert.<\/p>\n<iframe src=\"http:\/\/www.facebook.com\/plugins\/like.php?href=https%3A%2F%2Fwww.capri-soft.de%2Fblog%2F%3Fp%3D3265&amp;layout=standard&amp;show_faces=true&amp;width=450&amp;action=like&amp;colorscheme=light\" scrolling=\"no\" frameborder=\"0\" allowTransparency=\"true\" style=\"border:none; overflow:hidden; width:450px;margin-top:5px;\"><\/iframe>","protected":false},"excerpt":{"rendered":"<p>Problemfeld RelayCommand (s) erf\u00fcllen den Zweck von Actions \/ Delegates und sind somit Funktionszeiger die es erlauben, zu einem sp\u00e4teren Zeitpunkt eine Methode aufzurufen. Sie implementieren das Interface ICommand, welches von den WPF Controls genutzt wird, um bei Bedarf die Execute()-Methode aufzurufen. D.h. die Execute()-Methode soll nur dann aufgerufen werden, wenn das WPF Control das &hellip; <a href=\"https:\/\/www.capri-soft.de\/blog\/?p=3265\" class=\"more-link\"><span class=\"screen-reader-text\">WPF MVVM: Was ist der Sinn hinter RelayCommand und wozu braucht man RelayCommand?<\/span> weiterlesen <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[4,33,3,114],"tags":[],"class_list":["post-3265","post","type-post","status-publish","format-standard","hentry","category-net","category-c","category-programmierung","category-wpf-windows-presentation-foundation"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p4yGeN-QF","jetpack_likes_enabled":true,"jetpack-related-posts":[],"_links":{"self":[{"href":"https:\/\/www.capri-soft.de\/blog\/index.php?rest_route=\/wp\/v2\/posts\/3265","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.capri-soft.de\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.capri-soft.de\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.capri-soft.de\/blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.capri-soft.de\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=3265"}],"version-history":[{"count":1,"href":"https:\/\/www.capri-soft.de\/blog\/index.php?rest_route=\/wp\/v2\/posts\/3265\/revisions"}],"predecessor-version":[{"id":3268,"href":"https:\/\/www.capri-soft.de\/blog\/index.php?rest_route=\/wp\/v2\/posts\/3265\/revisions\/3268"}],"wp:attachment":[{"href":"https:\/\/www.capri-soft.de\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=3265"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.capri-soft.de\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=3265"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.capri-soft.de\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=3265"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}