{"id":18991,"date":"2024-03-15T17:59:44","date_gmt":"2024-03-15T17:59:44","guid":{"rendered":"https:\/\/www.silicloud.com\/blog\/what-is-the-method-for-two-way-data-binding-in-wpf\/"},"modified":"2024-03-21T14:37:58","modified_gmt":"2024-03-21T14:37:58","slug":"what-is-the-method-for-two-way-data-binding-in-wpf","status":"publish","type":"post","link":"https:\/\/www.silicloud.com\/blog\/what-is-the-method-for-two-way-data-binding-in-wpf\/","title":{"rendered":"What is the method for two-way data binding in WPF?"},"content":{"rendered":"<p>In WPF, you can achieve two-way data binding by using the following methods:<\/p>\n<ol>\n<li>Mode set to &#8220;TwoWay&#8221;<\/li>\n<\/ol>\n<p>Example code:<\/p>\n<p>Properties are defined in the ViewModel class.<\/p>\n<pre class=\"post-pre\"><code><span class=\"hljs-keyword\">private<\/span> <span class=\"hljs-built_in\">string<\/span> _name;\r\n<span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-built_in\">string<\/span> Name\r\n{\r\n    <span class=\"hljs-keyword\">get<\/span> { <span class=\"hljs-keyword\">return<\/span> _name; }\r\n    <span class=\"hljs-keyword\">set<\/span> \r\n    {\r\n        _name = <span class=\"hljs-keyword\">value<\/span>;\r\n        OnPropertyChanged(<span class=\"hljs-keyword\">nameof<\/span>(Name)); <span class=\"hljs-comment\">\/\/\u89e6\u53d1\u5c5e\u6027\u66f4\u6539\u901a\u77e5<\/span>\r\n    }\r\n}\r\n\r\n<span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">event<\/span> PropertyChangedEventHandler PropertyChanged;\r\n<span class=\"hljs-function\"><span class=\"hljs-keyword\">protected<\/span> <span class=\"hljs-keyword\">virtual<\/span> <span class=\"hljs-keyword\">void<\/span> <span class=\"hljs-title\">OnPropertyChanged<\/span>(<span class=\"hljs-params\"><span class=\"hljs-built_in\">string<\/span> propertyName<\/span>)<\/span>\r\n{\r\n    PropertyChanged?.Invoke(<span class=\"hljs-keyword\">this<\/span>, <span class=\"hljs-keyword\">new<\/span> PropertyChangedEventArgs(propertyName));\r\n}\r\n<\/code><\/pre>\n<p>Binding properties in XAML:<\/p>\n<pre class=\"post-pre\"><code>&lt;TextBox Text=\"{Binding Name, Mode=TwoWay}\" \/&gt;\r\n<\/code><\/pre>\n<ol>\n<li>Using Command: By using commands, you can achieve bidirectional binding by linking the Command property of UI elements (such as buttons) with commands in the ViewModel. Commands enable bidirectional data binding and logic processing in the ViewModel.<\/li>\n<\/ol>\n<p>Example code:<\/p>\n<p>Define commands in the ViewModel.<\/p>\n<pre class=\"post-pre\"><code><span class=\"hljs-keyword\">private<\/span> ICommand _updateCommand;\r\n<span class=\"hljs-keyword\">public<\/span> ICommand UpdateCommand\r\n{\r\n    <span class=\"hljs-keyword\">get<\/span>\r\n    {\r\n        <span class=\"hljs-keyword\">if<\/span> (_updateCommand == <span class=\"hljs-literal\">null<\/span>)\r\n        {\r\n            _updateCommand = <span class=\"hljs-keyword\">new<\/span> RelayCommand(UpdateName, CanUpdateName);\r\n        }\r\n        <span class=\"hljs-keyword\">return<\/span> _updateCommand;\r\n    }\r\n}\r\n\r\n<span class=\"hljs-function\"><span class=\"hljs-keyword\">private<\/span> <span class=\"hljs-built_in\">bool<\/span> <span class=\"hljs-title\">CanUpdateName<\/span>(<span class=\"hljs-params\"><span class=\"hljs-built_in\">object<\/span> parameter<\/span>)<\/span>\r\n{\r\n    <span class=\"hljs-comment\">\/\/\u6839\u636e\u5177\u4f53\u903b\u8f91\u5224\u65ad\u662f\u5426\u53ef\u4ee5\u6267\u884c\u547d\u4ee4<\/span>\r\n    <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-literal\">true<\/span>;\r\n}\r\n\r\n<span class=\"hljs-function\"><span class=\"hljs-keyword\">private<\/span> <span class=\"hljs-keyword\">void<\/span> <span class=\"hljs-title\">UpdateName<\/span>(<span class=\"hljs-params\"><span class=\"hljs-built_in\">object<\/span> parameter<\/span>)<\/span>\r\n{\r\n    <span class=\"hljs-comment\">\/\/\u6839\u636e\u5177\u4f53\u903b\u8f91\u66f4\u65b0Name\u5c5e\u6027\u7684\u503c<\/span>\r\n    Name = <span class=\"hljs-string\">\"New Name\"<\/span>;\r\n}\r\n<\/code><\/pre>\n<p>Binding commands in XAML<\/p>\n<pre class=\"post-pre\"><code>&lt;Button Content=\"Update\" Command=\"{Binding UpdateCommand}\" \/&gt;\r\n<\/code><\/pre>\n<p>Therefore, when the user clicks the button, the command will be executed, thus updating the value of the Name property.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In WPF, you can achieve two-way data binding by using the following methods: Mode set to &#8220;TwoWay&#8221; Example code: Properties are defined in the ViewModel class. private string _name; public string Name { get { return _name; } set { _name = value; OnPropertyChanged(nameof(Name)); \/\/\u89e6\u53d1\u5c5e\u6027\u66f4\u6539\u901a\u77e5 } } public event PropertyChangedEventHandler PropertyChanged; protected virtual void OnPropertyChanged(string [&hellip;]<\/p>\n","protected":false},"author":12,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_import_markdown_pro_load_document_selector":0,"_import_markdown_pro_submit_text_textarea":"","footnotes":""},"categories":[1],"tags":[],"class_list":["post-18991","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v21.5 (Yoast SEO v21.5) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>What is the method for two-way data binding in WPF? - Blog - Silicon Cloud<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.silicloud.com\/blog\/what-is-the-method-for-two-way-data-binding-in-wpf\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"What is the method for two-way data binding in WPF?\" \/>\n<meta property=\"og:description\" content=\"In WPF, you can achieve two-way data binding by using the following methods: Mode set to &#8220;TwoWay&#8221; Example code: Properties are defined in the ViewModel class. private string _name; public string Name { get { return _name; } set { _name = value; OnPropertyChanged(nameof(Name)); \/\/\u89e6\u53d1\u5c5e\u6027\u66f4\u6539\u901a\u77e5 } } public event PropertyChangedEventHandler PropertyChanged; protected virtual void OnPropertyChanged(string [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.silicloud.com\/blog\/what-is-the-method-for-two-way-data-binding-in-wpf\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog - Silicon Cloud\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/SiliCloudGlobal\/\" \/>\n<meta property=\"article:published_time\" content=\"2024-03-15T17:59:44+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-03-21T14:37:58+00:00\" \/>\n<meta name=\"author\" content=\"Liam\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@SiliCloudGlobal\" \/>\n<meta name=\"twitter:site\" content=\"@SiliCloudGlobal\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Liam\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"1 minute\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/what-is-the-method-for-two-way-data-binding-in-wpf\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/what-is-the-method-for-two-way-data-binding-in-wpf\/\"},\"author\":{\"name\":\"Liam\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/23786905eb7b377f45ddb01c17da7671\"},\"headline\":\"What is the method for two-way data binding in WPF?\",\"datePublished\":\"2024-03-15T17:59:44+00:00\",\"dateModified\":\"2024-03-21T14:37:58+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/what-is-the-method-for-two-way-data-binding-in-wpf\/\"},\"wordCount\":108,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/#organization\"},\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/what-is-the-method-for-two-way-data-binding-in-wpf\/\",\"url\":\"https:\/\/www.silicloud.com\/blog\/what-is-the-method-for-two-way-data-binding-in-wpf\/\",\"name\":\"What is the method for two-way data binding in WPF? - Blog - Silicon Cloud\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/#website\"},\"datePublished\":\"2024-03-15T17:59:44+00:00\",\"dateModified\":\"2024-03-21T14:37:58+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/what-is-the-method-for-two-way-data-binding-in-wpf\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.silicloud.com\/blog\/what-is-the-method-for-two-way-data-binding-in-wpf\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/what-is-the-method-for-two-way-data-binding-in-wpf\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.silicloud.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"What is the method for two-way data binding in WPF?\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#website\",\"url\":\"https:\/\/www.silicloud.com\/blog\/\",\"name\":\"Silicon Cloud Blog\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/#organization\"},\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#organization\",\"name\":\"Silicon Cloud Blog\",\"url\":\"https:\/\/www.silicloud.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.silicloud.com\/blog\/wp-content\/uploads\/2023\/11\/EN-SILICON-Full.png\",\"contentUrl\":\"https:\/\/www.silicloud.com\/blog\/wp-content\/uploads\/2023\/11\/EN-SILICON-Full.png\",\"width\":1024,\"height\":1024,\"caption\":\"Silicon Cloud Blog\"},\"image\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/SiliCloudGlobal\/\",\"https:\/\/twitter.com\/SiliCloudGlobal\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/23786905eb7b377f45ddb01c17da7671\",\"name\":\"Liam\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/8d37ed3e7f770dde8bf069ba0b4298688028c3abaacf1131742fc1352d174ebd?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/8d37ed3e7f770dde8bf069ba0b4298688028c3abaacf1131742fc1352d174ebd?s=96&d=mm&r=g\",\"caption\":\"Liam\"},\"sameAs\":[\"http:\/\/Wilson\"],\"url\":\"https:\/\/www.silicloud.com\/blog\/author\/liamwilson\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"What is the method for two-way data binding in WPF? - Blog - Silicon Cloud","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.silicloud.com\/blog\/what-is-the-method-for-two-way-data-binding-in-wpf\/","og_locale":"en_US","og_type":"article","og_title":"What is the method for two-way data binding in WPF?","og_description":"In WPF, you can achieve two-way data binding by using the following methods: Mode set to &#8220;TwoWay&#8221; Example code: Properties are defined in the ViewModel class. private string _name; public string Name { get { return _name; } set { _name = value; OnPropertyChanged(nameof(Name)); \/\/\u89e6\u53d1\u5c5e\u6027\u66f4\u6539\u901a\u77e5 } } public event PropertyChangedEventHandler PropertyChanged; protected virtual void OnPropertyChanged(string [&hellip;]","og_url":"https:\/\/www.silicloud.com\/blog\/what-is-the-method-for-two-way-data-binding-in-wpf\/","og_site_name":"Blog - Silicon Cloud","article_publisher":"https:\/\/www.facebook.com\/SiliCloudGlobal\/","article_published_time":"2024-03-15T17:59:44+00:00","article_modified_time":"2024-03-21T14:37:58+00:00","author":"Liam","twitter_card":"summary_large_image","twitter_creator":"@SiliCloudGlobal","twitter_site":"@SiliCloudGlobal","twitter_misc":{"Written by":"Liam","Est. reading time":"1 minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.silicloud.com\/blog\/what-is-the-method-for-two-way-data-binding-in-wpf\/#article","isPartOf":{"@id":"https:\/\/www.silicloud.com\/blog\/what-is-the-method-for-two-way-data-binding-in-wpf\/"},"author":{"name":"Liam","@id":"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/23786905eb7b377f45ddb01c17da7671"},"headline":"What is the method for two-way data binding in WPF?","datePublished":"2024-03-15T17:59:44+00:00","dateModified":"2024-03-21T14:37:58+00:00","mainEntityOfPage":{"@id":"https:\/\/www.silicloud.com\/blog\/what-is-the-method-for-two-way-data-binding-in-wpf\/"},"wordCount":108,"commentCount":0,"publisher":{"@id":"https:\/\/www.silicloud.com\/blog\/#organization"},"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.silicloud.com\/blog\/what-is-the-method-for-two-way-data-binding-in-wpf\/","url":"https:\/\/www.silicloud.com\/blog\/what-is-the-method-for-two-way-data-binding-in-wpf\/","name":"What is the method for two-way data binding in WPF? - Blog - Silicon Cloud","isPartOf":{"@id":"https:\/\/www.silicloud.com\/blog\/#website"},"datePublished":"2024-03-15T17:59:44+00:00","dateModified":"2024-03-21T14:37:58+00:00","breadcrumb":{"@id":"https:\/\/www.silicloud.com\/blog\/what-is-the-method-for-two-way-data-binding-in-wpf\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.silicloud.com\/blog\/what-is-the-method-for-two-way-data-binding-in-wpf\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.silicloud.com\/blog\/what-is-the-method-for-two-way-data-binding-in-wpf\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.silicloud.com\/blog\/"},{"@type":"ListItem","position":2,"name":"What is the method for two-way data binding in WPF?"}]},{"@type":"WebSite","@id":"https:\/\/www.silicloud.com\/blog\/#website","url":"https:\/\/www.silicloud.com\/blog\/","name":"Silicon Cloud Blog","description":"","publisher":{"@id":"https:\/\/www.silicloud.com\/blog\/#organization"},"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.silicloud.com\/blog\/#organization","name":"Silicon Cloud Blog","url":"https:\/\/www.silicloud.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.silicloud.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.silicloud.com\/blog\/wp-content\/uploads\/2023\/11\/EN-SILICON-Full.png","contentUrl":"https:\/\/www.silicloud.com\/blog\/wp-content\/uploads\/2023\/11\/EN-SILICON-Full.png","width":1024,"height":1024,"caption":"Silicon Cloud Blog"},"image":{"@id":"https:\/\/www.silicloud.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/SiliCloudGlobal\/","https:\/\/twitter.com\/SiliCloudGlobal"]},{"@type":"Person","@id":"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/23786905eb7b377f45ddb01c17da7671","name":"Liam","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/8d37ed3e7f770dde8bf069ba0b4298688028c3abaacf1131742fc1352d174ebd?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/8d37ed3e7f770dde8bf069ba0b4298688028c3abaacf1131742fc1352d174ebd?s=96&d=mm&r=g","caption":"Liam"},"sameAs":["http:\/\/Wilson"],"url":"https:\/\/www.silicloud.com\/blog\/author\/liamwilson\/"}]}},"_links":{"self":[{"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/posts\/18991","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/users\/12"}],"replies":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/comments?post=18991"}],"version-history":[{"count":1,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/posts\/18991\/revisions"}],"predecessor-version":[{"id":52707,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/posts\/18991\/revisions\/52707"}],"wp:attachment":[{"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/media?parent=18991"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/categories?post=18991"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/tags?post=18991"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}