{"id":18939,"date":"2024-03-15T17:52:47","date_gmt":"2024-03-15T17:52:47","guid":{"rendered":"https:\/\/www.silicloud.com\/blog\/how-to-communicate-between-two-windows-in-wpf\/"},"modified":"2024-03-21T14:30:32","modified_gmt":"2024-03-21T14:30:32","slug":"how-to-communicate-between-two-windows-in-wpf","status":"publish","type":"post","link":"https:\/\/www.silicloud.com\/blog\/how-to-communicate-between-two-windows-in-wpf\/","title":{"rendered":"How to communicate between two windows in WPF?"},"content":{"rendered":"<p>You can achieve communication between two windows in WPF using the following methods:<\/p>\n<ol>\n<li>Passing data through constructors: In the constructor of one window, you can pass an instance of another window as a parameter, and then retrieve the necessary data from that parameter.<\/li>\n<\/ol>\n<pre class=\"post-pre\"><code><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">partial<\/span> <span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">MainWindow<\/span> : <span class=\"hljs-title\">Window<\/span>\r\n{\r\n    <span class=\"hljs-keyword\">private<\/span> SecondWindow secondWindow;\r\n\r\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-title\">MainWindow<\/span>()<\/span>\r\n    {\r\n        InitializeComponent();\r\n        \r\n        <span class=\"hljs-comment\">\/\/ \u521b\u5efa\u7b2c\u4e8c\u4e2a\u7a97\u53e3\u5b9e\u4f8b<\/span>\r\n        secondWindow = <span class=\"hljs-keyword\">new<\/span> SecondWindow(<span class=\"hljs-keyword\">this<\/span>);\r\n    }\r\n\r\n    <span class=\"hljs-comment\">\/\/ \u5728\u7b2c\u4e8c\u4e2a\u7a97\u53e3\u4e2d\uff0c\u53ef\u4ee5\u83b7\u53d6\u5230\u4e3b\u7a97\u53e3\u7684\u5b9e\u4f8b\uff0c\u5e76\u8bbf\u95ee\u5176\u516c\u5171\u5c5e\u6027\u6216\u65b9\u6cd5<\/span>\r\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">void<\/span> <span class=\"hljs-title\">SendMessage<\/span>(<span class=\"hljs-params\"><span class=\"hljs-built_in\">string<\/span> message<\/span>)<\/span>\r\n    {\r\n        <span class=\"hljs-comment\">\/\/ \u5904\u7406\u6d88\u606f<\/span>\r\n    }\r\n}\r\n<\/code><\/pre>\n<ol>\n<li>By using events and delegates: you can define an event in one window to trigger when communicating with another window, passing data. In the other window, subscribe to the event and handle the data.<\/li>\n<\/ol>\n<pre class=\"post-pre\"><code><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">partial<\/span> <span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">MainWindow<\/span> : <span class=\"hljs-title\">Window<\/span>\r\n{\r\n    <span class=\"hljs-comment\">\/\/ \u5b9a\u4e49\u4e8b\u4ef6<\/span>\r\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">event<\/span> Action&lt;<span class=\"hljs-built_in\">string<\/span>&gt; MessageSent;\r\n\r\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">private<\/span> <span class=\"hljs-keyword\">void<\/span> <span class=\"hljs-title\">SendMessage<\/span>(<span class=\"hljs-params\"><span class=\"hljs-built_in\">string<\/span> message<\/span>)<\/span>\r\n    {\r\n        <span class=\"hljs-comment\">\/\/ \u89e6\u53d1\u4e8b\u4ef6<\/span>\r\n        MessageSent?.Invoke(message);\r\n    }\r\n}\r\n\r\n<span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">partial<\/span> <span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">SecondWindow<\/span> : <span class=\"hljs-title\">Window<\/span>\r\n{\r\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-title\">SecondWindow<\/span>()<\/span>\r\n    {\r\n        InitializeComponent();\r\n        \r\n        <span class=\"hljs-comment\">\/\/ \u8ba2\u9605\u4e8b\u4ef6<\/span>\r\n        <span class=\"hljs-keyword\">var<\/span> mainWindow = Application.Current.Windows.OfType&lt;MainWindow&gt;().FirstOrDefault();\r\n        <span class=\"hljs-keyword\">if<\/span> (mainWindow != <span class=\"hljs-literal\">null<\/span>)\r\n        {\r\n            mainWindow.MessageSent += HandleMessage;\r\n        }\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\">HandleMessage<\/span>(<span class=\"hljs-params\"><span class=\"hljs-built_in\">string<\/span> message<\/span>)<\/span>\r\n    {\r\n        <span class=\"hljs-comment\">\/\/ \u5904\u7406\u6d88\u606f<\/span>\r\n    }\r\n}\r\n<\/code><\/pre>\n<ol>\n<li>Using global variables: You can define a static property or field in the App class of the application to store data that needs to be shared. Communication between two windows can be done by accessing this global variable.<\/li>\n<\/ol>\n<pre class=\"post-pre\"><code><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">partial<\/span> <span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">App<\/span> : <span class=\"hljs-title\">Application<\/span>\r\n{\r\n    <span class=\"hljs-comment\">\/\/ \u5168\u5c40\u53d8\u91cf<\/span>\r\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-built_in\">string<\/span> SharedMessage { <span class=\"hljs-keyword\">get<\/span>; <span class=\"hljs-keyword\">set<\/span>; }\r\n}\r\n\r\n<span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">partial<\/span> <span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">MainWindow<\/span> : <span class=\"hljs-title\">Window<\/span>\r\n{\r\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">private<\/span> <span class=\"hljs-keyword\">void<\/span> <span class=\"hljs-title\">SendMessage<\/span>(<span class=\"hljs-params\"><span class=\"hljs-built_in\">string<\/span> message<\/span>)<\/span>\r\n    {\r\n        <span class=\"hljs-comment\">\/\/ \u8bbe\u7f6e\u5168\u5c40\u53d8\u91cf\u7684\u503c<\/span>\r\n        App.SharedMessage = message;\r\n    }\r\n}\r\n\r\n<span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">partial<\/span> <span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">SecondWindow<\/span> : <span class=\"hljs-title\">Window<\/span>\r\n{\r\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-title\">SecondWindow<\/span>()<\/span>\r\n    {\r\n        InitializeComponent();\r\n        \r\n        <span class=\"hljs-comment\">\/\/ \u83b7\u53d6\u5168\u5c40\u53d8\u91cf\u7684\u503c<\/span>\r\n        <span class=\"hljs-keyword\">var<\/span> message = App.SharedMessage;\r\n        \r\n        <span class=\"hljs-comment\">\/\/ \u5904\u7406\u6d88\u606f<\/span>\r\n    }\r\n}\r\n<\/code><\/pre>\n<p>Here are some common implementation methods, you can choose the one that best suits your situation.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>You can achieve communication between two windows in WPF using the following methods: Passing data through constructors: In the constructor of one window, you can pass an instance of another window as a parameter, and then retrieve the necessary data from that parameter. public partial class MainWindow : Window { private SecondWindow secondWindow; public MainWindow() [&hellip;]<\/p>\n","protected":false},"author":13,"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-18939","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>How to communicate between two windows 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\/how-to-communicate-between-two-windows-in-wpf\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"How to communicate between two windows in WPF?\" \/>\n<meta property=\"og:description\" content=\"You can achieve communication between two windows in WPF using the following methods: Passing data through constructors: In the constructor of one window, you can pass an instance of another window as a parameter, and then retrieve the necessary data from that parameter. public partial class MainWindow : Window { private SecondWindow secondWindow; public MainWindow() [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.silicloud.com\/blog\/how-to-communicate-between-two-windows-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:52:47+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-03-21T14:30:32+00:00\" \/>\n<meta name=\"author\" content=\"Isabella Edwards\" \/>\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=\"Isabella Edwards\" \/>\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\/how-to-communicate-between-two-windows-in-wpf\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/how-to-communicate-between-two-windows-in-wpf\/\"},\"author\":{\"name\":\"Isabella Edwards\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/5579144e23c225c8188167f3e3f888dd\"},\"headline\":\"How to communicate between two windows in WPF?\",\"datePublished\":\"2024-03-15T17:52:47+00:00\",\"dateModified\":\"2024-03-21T14:30:32+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/how-to-communicate-between-two-windows-in-wpf\/\"},\"wordCount\":139,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/#organization\"},\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/how-to-communicate-between-two-windows-in-wpf\/\",\"url\":\"https:\/\/www.silicloud.com\/blog\/how-to-communicate-between-two-windows-in-wpf\/\",\"name\":\"How to communicate between two windows in WPF? - Blog - Silicon Cloud\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/#website\"},\"datePublished\":\"2024-03-15T17:52:47+00:00\",\"dateModified\":\"2024-03-21T14:30:32+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/how-to-communicate-between-two-windows-in-wpf\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.silicloud.com\/blog\/how-to-communicate-between-two-windows-in-wpf\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/how-to-communicate-between-two-windows-in-wpf\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.silicloud.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"How to communicate between two windows 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\/5579144e23c225c8188167f3e3f888dd\",\"name\":\"Isabella Edwards\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/d4d4dec47f553ac7961d9fa4cc9bdcdcf5b7ce5106594330b6d25c5694fdbaec?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/d4d4dec47f553ac7961d9fa4cc9bdcdcf5b7ce5106594330b6d25c5694fdbaec?s=96&d=mm&r=g\",\"caption\":\"Isabella Edwards\"},\"url\":\"https:\/\/www.silicloud.com\/blog\/author\/isabellaedwards\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"How to communicate between two windows 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\/how-to-communicate-between-two-windows-in-wpf\/","og_locale":"en_US","og_type":"article","og_title":"How to communicate between two windows in WPF?","og_description":"You can achieve communication between two windows in WPF using the following methods: Passing data through constructors: In the constructor of one window, you can pass an instance of another window as a parameter, and then retrieve the necessary data from that parameter. public partial class MainWindow : Window { private SecondWindow secondWindow; public MainWindow() [&hellip;]","og_url":"https:\/\/www.silicloud.com\/blog\/how-to-communicate-between-two-windows-in-wpf\/","og_site_name":"Blog - Silicon Cloud","article_publisher":"https:\/\/www.facebook.com\/SiliCloudGlobal\/","article_published_time":"2024-03-15T17:52:47+00:00","article_modified_time":"2024-03-21T14:30:32+00:00","author":"Isabella Edwards","twitter_card":"summary_large_image","twitter_creator":"@SiliCloudGlobal","twitter_site":"@SiliCloudGlobal","twitter_misc":{"Written by":"Isabella Edwards","Est. reading time":"1 minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.silicloud.com\/blog\/how-to-communicate-between-two-windows-in-wpf\/#article","isPartOf":{"@id":"https:\/\/www.silicloud.com\/blog\/how-to-communicate-between-two-windows-in-wpf\/"},"author":{"name":"Isabella Edwards","@id":"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/5579144e23c225c8188167f3e3f888dd"},"headline":"How to communicate between two windows in WPF?","datePublished":"2024-03-15T17:52:47+00:00","dateModified":"2024-03-21T14:30:32+00:00","mainEntityOfPage":{"@id":"https:\/\/www.silicloud.com\/blog\/how-to-communicate-between-two-windows-in-wpf\/"},"wordCount":139,"commentCount":0,"publisher":{"@id":"https:\/\/www.silicloud.com\/blog\/#organization"},"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.silicloud.com\/blog\/how-to-communicate-between-two-windows-in-wpf\/","url":"https:\/\/www.silicloud.com\/blog\/how-to-communicate-between-two-windows-in-wpf\/","name":"How to communicate between two windows in WPF? - Blog - Silicon Cloud","isPartOf":{"@id":"https:\/\/www.silicloud.com\/blog\/#website"},"datePublished":"2024-03-15T17:52:47+00:00","dateModified":"2024-03-21T14:30:32+00:00","breadcrumb":{"@id":"https:\/\/www.silicloud.com\/blog\/how-to-communicate-between-two-windows-in-wpf\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.silicloud.com\/blog\/how-to-communicate-between-two-windows-in-wpf\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.silicloud.com\/blog\/how-to-communicate-between-two-windows-in-wpf\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.silicloud.com\/blog\/"},{"@type":"ListItem","position":2,"name":"How to communicate between two windows 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\/5579144e23c225c8188167f3e3f888dd","name":"Isabella Edwards","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/d4d4dec47f553ac7961d9fa4cc9bdcdcf5b7ce5106594330b6d25c5694fdbaec?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/d4d4dec47f553ac7961d9fa4cc9bdcdcf5b7ce5106594330b6d25c5694fdbaec?s=96&d=mm&r=g","caption":"Isabella Edwards"},"url":"https:\/\/www.silicloud.com\/blog\/author\/isabellaedwards\/"}]}},"_links":{"self":[{"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/posts\/18939","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\/13"}],"replies":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/comments?post=18939"}],"version-history":[{"count":1,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/posts\/18939\/revisions"}],"predecessor-version":[{"id":52651,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/posts\/18939\/revisions\/52651"}],"wp:attachment":[{"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/media?parent=18939"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/categories?post=18939"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/tags?post=18939"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}