{"id":37691,"date":"2024-11-01T09:59:38","date_gmt":"2024-11-01T09:59:38","guid":{"rendered":"http:\/\/atmokpo.com\/w\/?p=37691"},"modified":"2024-11-01T11:04:07","modified_gmt":"2024-11-01T11:04:07","slug":"wpf-development-data-binding","status":"publish","type":"post","link":"https:\/\/atmokpo.com\/w\/37691\/","title":{"rendered":"WPF Development, Data Binding"},"content":{"rendered":"<p>WPF (Windows Presentation Foundation) is a powerful tool for building user interfaces (UIs). One of the main features of WPF is data binding. Data binding allows a connection between UI elements and data sources, enabling changes in data to automatically reflect in the UI, or conversely, changes in the UI to be reflected in the data source. This article will provide an in-depth explanation of data binding in WPF along with various examples of how to utilize it.<\/p>\n<h2>Basic Concepts of Data Binding<\/h2>\n<p>Data binding essentially establishes a relationship between the &#8216;source&#8217; and the &#8216;target&#8217;. The source refers to the location where data is stored, while the target refers to the UI element where the data is displayed. Once binding is set up, the UI element is automatically updated whenever the data in the data source changes. This feature can greatly enhance the user experience in large applications.<\/p>\n<h3>Types of Data Binding<\/h3>\n<ul>\n<li><strong>One-Way Binding:<\/strong> Changes in the data source are reflected in the UI, but changes in the UI do not affect the data source.<\/li>\n<li><strong>Two-Way Binding:<\/strong> Allows bidirectional data flow between the data source and UI elements. Changes in the UI are reflected in the data source.<\/li>\n<li><strong>One-Time Binding:<\/strong> Data is displayed in the UI only at the moment the binding is set; subsequent data changes do not trigger UI updates.<\/li>\n<\/ul>\n<h3>Basic Setup for Data Binding<\/h3>\n<p>To use data binding in WPF, you need to set the `DataContext` property. DataContext is a crucial property for setting the data source when establishing data binding. Here is a basic example of setting DataContext.<\/p>\n<pre><code class=\"language-csharp\">using System.Windows;\nusing System.ComponentModel;\n\nnamespace WpfApp\n{\n    public partial class MainWindow : Window, INotifyPropertyChanged\n    {\n        private string _name;\n\n        public string Name\n        {\n            get =&gt; _name;\n            set\n            {\n                _name = value;\n                OnPropertyChanged(nameof(Name));\n            }\n        }\n\n        public MainWindow()\n        {\n            InitializeComponent();\n            DataContext = this; \/\/ Setting DataContext\n            Name = \"WPF Developer\";\n        }\n\n        public event PropertyChangedEventHandler PropertyChanged;\n\n        protected void OnPropertyChanged(string propertyName)\n        {\n            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));\n        }\n    }\n}\n<\/code><\/pre>\n<h4>XAML Code<\/h4>\n<pre><code class=\"language-xml\">&lt;Window x:Class=\"WpfApp.MainWindow\"\n        xmlns=\"http:\/\/schemas.microsoft.com\/winfx\/2006\/xaml\/presentation\"\n        xmlns:x=\"http:\/\/schemas.microsoft.com\/winfx\/2006\/xaml\"\n        Title=\"MainWindow\" Height=\"200\" Width=\"400\"&gt;\n    &lt;StackPanel&gt;\n        &lt;TextBox Text=\"{Binding Name, UpdateSourceTrigger=PropertyChanged}\" \/&gt;\n        &lt;TextBlock Text=\"{Binding Name}\" FontSize=\"24\" \/&gt;\n    &lt;\/StackPanel&gt;\n&lt;\/Window&gt;<\/code><\/pre>\n<p>In the code above, the TextBox and TextBlock are bound to the `Name` property. When a value is entered in the TextBox, it is reflected in real-time in the TextBlock.<\/p>\n<h2>Advanced Features of Data Binding<\/h2>\n<p>WPF&#8217;s data binding extends beyond simple binding to offer a variety of features. Here, we will discuss Converter, MultiBinding, Binding error handling, and Validation.<\/p>\n<h3>Value Converter<\/h3>\n<p>A Value Converter can be used to transform the values being bound. For example, it can be used when the value entered by the user must be in a specific format.<\/p>\n<pre><code class=\"language-csharp\">using System;\nusing System.Globalization;\nusing System.Windows.Data;\n\nnamespace WpfApp.Converters\n{\n    public class NameToUpperConverter : IValueConverter\n    {\n        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)\n        {\n            return value?.ToString().ToUpper(); \/\/ Converts input to uppercase\n        }\n\n        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)\n        {\n            return value?.ToString().ToLower(); \/\/ Converts uppercase to lowercase\n        }\n    }\n}\n<\/code><\/pre>\n<h4>Using XAML Code<\/h4>\n<pre><code class=\"language-xml\">&lt;Window.Resources&gt;\n    &lt;local:NameToUpperConverter x:Key=\"NameToUpperConverter\" \/&gt;\n&lt;\/Window.Resources&gt;\n&lt;TextBox Text=\"{Binding Name, Converter={StaticResource NameToUpperConverter}, UpdateSourceTrigger=PropertyChanged}\" \/&gt;<\/code><\/pre>\n<p>Using a Value Converter allows for data transformation, enabling flexible UI configurations.<\/p>\n<h3>MultiBinding<\/h3>\n<p>MultiBinding is a feature that allows binding multiple data sources to a single property. In this case, MultiValueConverter can be used to convert multiple values.<\/p>\n<pre><code class=\"language-csharp\">using System;\nusing System.Globalization;\nusing System.Windows.Data;\n\nnamespace WpfApp.Converters\n{\n    public class MultiConverter : IMultiValueConverter\n    {\n        public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)\n        {\n            return string.Join(\" \", values); \/\/ Combines all input values into a single string\n        }\n\n        public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)\n        {\n            return value.ToString().Split(' '); \/\/ Splits string into an array\n        }\n    }\n}\n<\/code><\/pre>\n<h4>Using MultiBinding in XAML<\/h4>\n<pre><code class=\"language-xml\">&lt;Window.Resources&gt;\n    &lt;local:MultiConverter x:Key=\"MultiConverter\" \/&gt;\n&lt;\/Window.Resources&gt;\n\n&lt;TextBox x:Name=\"TextBox1\" \/&gt;\n&lt;TextBox x:Name=\"TextBox2\" \/&gt;\n&lt;TextBlock&gt;\n    &lt;TextBlock.Text&gt;\n        &lt;MultiBinding Converter=\"{StaticResource MultiConverter}\"&gt;\n            &lt;Binding ElementName=\"TextBox1\" Path=\"Text\" \/&gt;\n            &lt;Binding ElementName=\"TextBox2\" Path=\"Text\" \/&gt;\n        &lt;\/MultiBinding&gt;\n    &lt;\/TextBlock.Text&gt;\n&lt;\/TextBlock&gt;<\/code><\/pre>\n<p>By utilizing MultiBinding, you can combine data from multiple sources into one.<\/p>\n<h3>Binding Error Handling<\/h3>\n<p>There are also ways to handle errors that may occur during data binding. WPF allows detection of errors through BindingFailed and BindingError events. For example, one can handle errors caused by incorrect data types.<\/p>\n<pre><code class=\"language-csharp\">private void OnBindingError(object sender, BindingErrorEventArgs e)\n{\n    MessageBox.Show($\"Binding Error: {e.ErrorMessage}\");\n}\n<\/code><\/pre>\n<p>Through Binding Error, you can show error messages to users or perform specific actions.<\/p>\n<h3>Validation<\/h3>\n<p>Validating the data entered by users is also an important feature of data binding. In WPF, you can implement data validation by using the IDataErrorInfo or INotifyDataErrorInfo interfaces.<\/p>\n<pre><code class=\"language-csharp\">public class User : IDataErrorInfo\n{\n    public string Name { get; set; }\n\n    public string this[string columnName]\n    {\n        get\n        {\n            if (columnName == nameof(Name) &amp;&amp; string.IsNullOrWhiteSpace(Name))\n                return \"Name is a required field.\";\n            return null;\n        }\n    }\n\n    public string Error =&gt; null;\n}\n<\/code><\/pre>\n<h4>Using Validation in XAML<\/h4>\n<pre><code class=\"language-xml\">&lt;TextBox Text=\"{Binding Name, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True}\" \/&gt;<\/code><\/pre>\n<p>Using Validation improves the reliability of the data entered by users and provides necessary feedback to them.<\/p>\n<h2>Conclusion<\/h2>\n<p>The data binding in WPF offers powerful UI development capabilities. Binding enables smooth interaction between the UI and data, and advanced features such as Value Converter, MultiBinding, Binding error handling, and Validation provide an even more flexible and efficient user experience. Based on the content discussed in this article, we hope you enhance your applications by utilizing WPF data binding.<\/p>\n<h2>Additional Resources<\/h2>\n<p>If you would like more information, please refer to the following links:<\/p>\n<ul>\n<li><a href=\"https:\/\/docs.microsoft.com\/en-us\/dotnet\/desktop\/wpf\/data\/data-binding-overview?view=netdesktop-6.0\">Microsoft Docs: Data Binding Overview<\/a><\/li>\n<li><a href=\"https:\/\/www.c-sharpcorner.com\/article\/data-binding-in-wpf\/\">C# Corner: Data Binding in WPF<\/a><\/li>\n<li><a href=\"https:\/\/www.tutorialspoint.com\/wpf\/wpf_data_binding.htm\">TutorialsPoint: WPF &#8211; Data Binding<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>WPF (Windows Presentation Foundation) is a powerful tool for building user interfaces (UIs). One of the main features of WPF is data binding. Data binding allows a connection between UI elements and data sources, enabling changes in data to automatically reflect in the UI, or conversely, changes in the UI to be reflected in the &hellip; <a href=\"https:\/\/atmokpo.com\/w\/37691\/\" class=\"more-link\">\ub354 \ubcf4\uae30<span class=\"screen-reader-text\"> &#8220;WPF Development, Data Binding&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[117],"tags":[],"class_list":["post-37691","post","type-post","status-publish","format-standard","hentry","category-wpf-programming"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.2 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>WPF Development, Data Binding - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8<\/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:\/\/atmokpo.com\/w\/37691\/\" \/>\n<meta property=\"og:locale\" content=\"ko_KR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"WPF Development, Data Binding - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\" \/>\n<meta property=\"og:description\" content=\"WPF (Windows Presentation Foundation) is a powerful tool for building user interfaces (UIs). One of the main features of WPF is data binding. Data binding allows a connection between UI elements and data sources, enabling changes in data to automatically reflect in the UI, or conversely, changes in the UI to be reflected in the &hellip; \ub354 \ubcf4\uae30 &quot;WPF Development, Data Binding&quot;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/atmokpo.com\/w\/37691\/\" \/>\n<meta property=\"og:site_name\" content=\"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\" \/>\n<meta property=\"article:published_time\" content=\"2024-11-01T09:59:38+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-11-01T11:04:07+00:00\" \/>\n<meta name=\"author\" content=\"root\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@bebubo4\" \/>\n<meta name=\"twitter:site\" content=\"@bebubo4\" \/>\n<meta name=\"twitter:label1\" content=\"\uae00\uc4f4\uc774\" \/>\n\t<meta name=\"twitter:data1\" content=\"root\" \/>\n\t<meta name=\"twitter:label2\" content=\"\uc608\uc0c1 \ub418\ub294 \ud310\ub3c5 \uc2dc\uac04\" \/>\n\t<meta name=\"twitter:data2\" content=\"5\ubd84\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/atmokpo.com\/w\/37691\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/atmokpo.com\/w\/37691\/\"},\"author\":{\"name\":\"root\",\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7\"},\"headline\":\"WPF Development, Data Binding\",\"datePublished\":\"2024-11-01T09:59:38+00:00\",\"dateModified\":\"2024-11-01T11:04:07+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/atmokpo.com\/w\/37691\/\"},\"wordCount\":610,\"publisher\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#organization\"},\"articleSection\":[\"WPF Programming\"],\"inLanguage\":\"ko-KR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/atmokpo.com\/w\/37691\/\",\"url\":\"https:\/\/atmokpo.com\/w\/37691\/\",\"name\":\"WPF Development, Data Binding - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\",\"isPartOf\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#website\"},\"datePublished\":\"2024-11-01T09:59:38+00:00\",\"dateModified\":\"2024-11-01T11:04:07+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/atmokpo.com\/w\/37691\/#breadcrumb\"},\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/atmokpo.com\/w\/37691\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/atmokpo.com\/w\/37691\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\ud648\",\"item\":\"https:\/\/atmokpo.com\/w\/en\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"WPF Development, Data Binding\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/atmokpo.com\/w\/#website\",\"url\":\"https:\/\/atmokpo.com\/w\/\",\"name\":\"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/atmokpo.com\/w\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"ko-KR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/atmokpo.com\/w\/#organization\",\"name\":\"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\",\"url\":\"https:\/\/atmokpo.com\/w\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/atmokpo.com\/w\/wp-content\/uploads\/2024\/11\/logo.png\",\"contentUrl\":\"https:\/\/atmokpo.com\/w\/wp-content\/uploads\/2024\/11\/logo.png\",\"width\":400,\"height\":400,\"caption\":\"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\"},\"image\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/x.com\/bebubo4\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7\",\"name\":\"root\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/708197b41fc6435a7ce22d951b25d4a47e9e904270cb1f04682d4f025066f80c?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/708197b41fc6435a7ce22d951b25d4a47e9e904270cb1f04682d4f025066f80c?s=96&d=mm&r=g\",\"caption\":\"root\"},\"sameAs\":[\"http:\/\/atmokpo.com\/w\"],\"url\":\"https:\/\/atmokpo.com\/w\/author\/root\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"WPF Development, Data Binding - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","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:\/\/atmokpo.com\/w\/37691\/","og_locale":"ko_KR","og_type":"article","og_title":"WPF Development, Data Binding - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","og_description":"WPF (Windows Presentation Foundation) is a powerful tool for building user interfaces (UIs). One of the main features of WPF is data binding. Data binding allows a connection between UI elements and data sources, enabling changes in data to automatically reflect in the UI, or conversely, changes in the UI to be reflected in the &hellip; \ub354 \ubcf4\uae30 \"WPF Development, Data Binding\"","og_url":"https:\/\/atmokpo.com\/w\/37691\/","og_site_name":"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","article_published_time":"2024-11-01T09:59:38+00:00","article_modified_time":"2024-11-01T11:04:07+00:00","author":"root","twitter_card":"summary_large_image","twitter_creator":"@bebubo4","twitter_site":"@bebubo4","twitter_misc":{"\uae00\uc4f4\uc774":"root","\uc608\uc0c1 \ub418\ub294 \ud310\ub3c5 \uc2dc\uac04":"5\ubd84"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/atmokpo.com\/w\/37691\/#article","isPartOf":{"@id":"https:\/\/atmokpo.com\/w\/37691\/"},"author":{"name":"root","@id":"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7"},"headline":"WPF Development, Data Binding","datePublished":"2024-11-01T09:59:38+00:00","dateModified":"2024-11-01T11:04:07+00:00","mainEntityOfPage":{"@id":"https:\/\/atmokpo.com\/w\/37691\/"},"wordCount":610,"publisher":{"@id":"https:\/\/atmokpo.com\/w\/#organization"},"articleSection":["WPF Programming"],"inLanguage":"ko-KR"},{"@type":"WebPage","@id":"https:\/\/atmokpo.com\/w\/37691\/","url":"https:\/\/atmokpo.com\/w\/37691\/","name":"WPF Development, Data Binding - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","isPartOf":{"@id":"https:\/\/atmokpo.com\/w\/#website"},"datePublished":"2024-11-01T09:59:38+00:00","dateModified":"2024-11-01T11:04:07+00:00","breadcrumb":{"@id":"https:\/\/atmokpo.com\/w\/37691\/#breadcrumb"},"inLanguage":"ko-KR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/atmokpo.com\/w\/37691\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/atmokpo.com\/w\/37691\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\ud648","item":"https:\/\/atmokpo.com\/w\/en\/"},{"@type":"ListItem","position":2,"name":"WPF Development, Data Binding"}]},{"@type":"WebSite","@id":"https:\/\/atmokpo.com\/w\/#website","url":"https:\/\/atmokpo.com\/w\/","name":"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","description":"","publisher":{"@id":"https:\/\/atmokpo.com\/w\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/atmokpo.com\/w\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"ko-KR"},{"@type":"Organization","@id":"https:\/\/atmokpo.com\/w\/#organization","name":"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","url":"https:\/\/atmokpo.com\/w\/","logo":{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/atmokpo.com\/w\/#\/schema\/logo\/image\/","url":"https:\/\/atmokpo.com\/w\/wp-content\/uploads\/2024\/11\/logo.png","contentUrl":"https:\/\/atmokpo.com\/w\/wp-content\/uploads\/2024\/11\/logo.png","width":400,"height":400,"caption":"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8"},"image":{"@id":"https:\/\/atmokpo.com\/w\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/x.com\/bebubo4"]},{"@type":"Person","@id":"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7","name":"root","image":{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/atmokpo.com\/w\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/708197b41fc6435a7ce22d951b25d4a47e9e904270cb1f04682d4f025066f80c?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/708197b41fc6435a7ce22d951b25d4a47e9e904270cb1f04682d4f025066f80c?s=96&d=mm&r=g","caption":"root"},"sameAs":["http:\/\/atmokpo.com\/w"],"url":"https:\/\/atmokpo.com\/w\/author\/root\/"}]}},"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack-related-posts":[],"_links":{"self":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/37691","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/comments?post=37691"}],"version-history":[{"count":1,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/37691\/revisions"}],"predecessor-version":[{"id":37692,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/37691\/revisions\/37692"}],"wp:attachment":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/media?parent=37691"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/categories?post=37691"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/tags?post=37691"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}