{"id":37655,"date":"2024-11-01T09:59:20","date_gmt":"2024-11-01T09:59:20","guid":{"rendered":"http:\/\/atmokpo.com\/w\/?p=37655"},"modified":"2024-11-01T11:01:50","modified_gmt":"2024-11-01T11:01:50","slug":"uwp-development-command-binding","status":"publish","type":"post","link":"https:\/\/atmokpo.com\/w\/37655\/","title":{"rendered":"UWP Development, Command Binding"},"content":{"rendered":"<p>Command binding in UWP (Universal Windows Platform) development is an important concept that connects the user interface (UI) with the application&#8217;s business logic. Commands define actions associated with UI elements (such as buttons and menus), facilitating easy interaction between code and the UI through data binding. This article will provide a detailed explanation of the concept of command binding, how to use it, example code, and how to effectively develop UWP applications using commands.<\/p>\n<h2>1. What is a Command?<\/h2>\n<p>A command is a class that defines actions the user can perform in the UI. In UWP, classes that implement the <code>ICommand<\/code> interface are used as commands. Commands provide two basic functionalities:<\/p>\n<ul>\n<li><strong>Execute:<\/strong> Handles the conditions under which the command can be executed.<\/li>\n<li><strong>CanExecute:<\/strong> Determines whether the command can currently be executed.<\/li>\n<\/ul>\n<p>For example, the action of saving a file can be defined as a command when the &#8216;Save&#8217; button is clicked. Once the command is defined, it can be bound to UI elements to execute the command.<\/p>\n<h2>2. ICommand Interface<\/h2>\n<p>The <code>ICommand<\/code> interface includes two events and two methods:<\/p>\n<ul>\n<li><code>Execute(object parameter)<\/code> &#8211; Called when the command is executed.<\/li>\n<li><code>CanExecute(object parameter)<\/code> &#8211; Determines whether the command can be executed.<\/li>\n<li><code>CanExecuteChanged<\/code> &#8211; An event that occurs when the command&#8217;s status changes.<\/li>\n<\/ul>\n<p>You can create custom commands by implementing this interface. Below is a simple example of implementing the <code>ICommand<\/code> interface:<\/p>\n<pre><code>using System;\nusing System.Windows.Input;\n\npublic class RelayCommand : ICommand\n{\n    private readonly Action<object> _execute;\n    private readonly Predicate<object> _canExecute;\n\n    public event EventHandler CanExecuteChanged;\n\n    public RelayCommand(Action<object> execute, Predicate<object> canExecute = null)\n    {\n        _execute = execute ?? throw new ArgumentNullException(nameof(execute));\n        _canExecute = canExecute;\n    }\n\n    public bool CanExecute(object parameter)\n    {\n        return _canExecute == null || _canExecute(parameter);\n    }\n\n    public void Execute(object parameter)\n    {\n        _execute(parameter);\n    }\n\n    public void RaiseCanExecuteChanged()\n    {\n        CanExecuteChanged?.Invoke(this, EventArgs.Empty);\n    }\n}\n<\/code><\/pre>\n<h2>3. Principles of Command Binding<\/h2>\n<p>Using command binding in UWP allows for updating the application&#8217;s state based on user input by linking commands associated with UI elements. For instance, you can bind a command to a button&#8217;s <code>Command<\/code> property to perform a specific action when the button is clicked.<\/p>\n<h2>4. Binding Commands in XAML<\/h2>\n<p>In XAML, the <code>Command<\/code> property can be used to bind UI elements to commands. It is used in the following structure:<\/p>\n<pre><code>&lt;Button Content=\"Save\" Command=\"{Binding SaveCommand}\" \/&gt;\n<\/code><\/pre>\n<p>In the code above, <code>SaveCommand<\/code> is a command defined in the ViewModel. The ViewModel is connected to the UI through data binding. Typically, the MVVM (Model-View-ViewModel) pattern is used to define the ViewModel.<\/p>\n<h2>5. Understanding the MVVM Pattern<\/h2>\n<p>The MVVM pattern is a fundamental architecture that defines the structure of UWP applications. MVVM consists of three components:<\/p>\n<ul>\n<li><strong>Model:<\/strong> Defines data and business logic.<\/li>\n<li><strong>View:<\/strong> Interacts with the user through UI elements.<\/li>\n<li><strong>ViewModel:<\/strong> Mediates interaction between the View and Model, providing data binding.<\/li>\n<\/ul>\n<p>By using the MVVM pattern, you can separate UI code from business logic, making maintenance easier and testing more straightforward.<\/p>\n<h2>6. Example: Creating a Simple Notepad App<\/h2>\n<p>Below, we implement a simple notepad app to explain command binding. This app provides functionality to add and delete notes.<\/p>\n<h3>6.1 Defining the Model<\/h3>\n<pre><code>public class Note\n{\n    public string Content { get; set; }\n}\n<\/code><\/pre>\n<h3>6.2 Defining the ViewModel<\/h3>\n<pre><code>using System.Collections.ObjectModel;\n\npublic class NotesViewModel : INotifyPropertyChanged\n{\n    public ObservableCollection&lt;Note&gt; Notes { get; set; } = new ObservableCollection&lt;Note&gt;();\n    \n    public ICommand AddNoteCommand { get; }\n\n    public NotesViewModel()\n    {\n        AddNoteCommand = new RelayCommand(AddNoteExecute);\n    }\n\n    private void AddNoteExecute(object content)\n    {\n        Notes.Add(new Note { Content = content as string });\n    }\n\n    \/\/ Implementation related to INotifyPropertyChanged\n    public event PropertyChangedEventHandler PropertyChanged;\n    protected void OnPropertyChanged(string propertyName)\n    {\n        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));\n    }\n}\n<\/code><\/pre>\n<h3>6.3 Defining the XAML UI<\/h3>\n<pre><code>&lt;Page\n    x:Class=\"MyApp.MainPage\"\n    xmlns=\"http:\/\/schemas.microsoft.com\/winfx\/2006\/xaml\/presentation\"\n    xmlns:x=\"http:\/\/schemas.microsoft.com\/winfx\/2006\/xaml\"\n    xmlns:local=\"using:MyApp\"\n    DataContext=\"{StaticResource NotesViewModel}\"&gt;\n\n    &lt;StackPanel&gt;\n        &lt;TextBox x:Name=\"NoteInput\" Width=\"300\" \/&gt;\n        &lt;Button Content=\"Add Note\" Command=\"{Binding AddNoteCommand}\" CommandParameter=\"{Binding Text, ElementName=NoteInput}\" \/&gt;\n        &lt;ListBox ItemsSource=\"{Binding Notes}\" DisplayMemberPath=\"Content\" \/&gt;\n    &lt;\/StackPanel&gt;\n&lt;\/Page&gt;\n<\/code><\/pre>\n<h3>6.4 Overall Code Structure<\/h3>\n<p>When you combine all of the above code blocks into one, it looks like this:<\/p>\n<pre><code>using System;\nusing System.Collections.ObjectModel;\nusing System.ComponentModel;\nusing System.Windows.Input;\n\npublic class Note\n{\n    public string Content { get; set; }\n}\n\npublic class NotesViewModel : INotifyPropertyChanged\n{\n    public ObservableCollection&lt;Note&gt; Notes { get; set; } = new ObservableCollection&lt;Note&gt;();\n    \n    public ICommand AddNoteCommand { get; }\n\n    public NotesViewModel()\n    {\n        AddNoteCommand = new RelayCommand(AddNoteExecute);\n    }\n\n    private void AddNoteExecute(object content)\n    {\n        Notes.Add(new Note { Content = content as string });\n    }\n\n    public event PropertyChangedEventHandler PropertyChanged;\n    protected void OnPropertyChanged(string propertyName)\n    {\n        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));\n    }\n}\n\npublic class RelayCommand : ICommand\n{\n    private readonly Action<object> _execute;\n    private readonly Predicate<object> _canExecute;\n\n    public event EventHandler CanExecuteChanged;\n\n    public RelayCommand(Action<object> execute, Predicate<object> canExecute = null)\n    {\n        _execute = execute ?? throw new ArgumentNullException(nameof(execute));\n        _canExecute = canExecute;\n    }\n\n    public bool CanExecute(object parameter)\n    {\n        return _canExecute == null || _canExecute(parameter);\n    }\n\n    public void Execute(object parameter)\n    {\n        _execute(parameter);\n    }\n\n    public void RaiseCanExecuteChanged()\n    {\n        CanExecuteChanged?.Invoke(this, EventArgs.Empty);\n    }\n}\n<\/code><\/pre>\n<h2>7. Conclusion<\/h2>\n<p>Command binding is an essential technique in UWP development, enabling smooth interaction between the UI and business logic. By using the MVVM pattern, the application structure can be kept clean, and user experience can be enhanced through the utilization of commands and data binding. Based on the content explained in this article, I hope you add various commands to your UWP applications for a better development experience.<\/p>\n<h2>References<\/h2>\n<ul>\n<li><a href=\"https:\/\/docs.microsoft.com\/en-us\/windows\/uwp\/design\/basics\/data-binding\">UWP Data Binding Documentation<\/a><\/li>\n<li><a href=\"https:\/\/docs.microsoft.com\/en-us\/windows\/uwp\/design\/basics\/mvvm\">MVVM in UWP Overview<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Command binding in UWP (Universal Windows Platform) development is an important concept that connects the user interface (UI) with the application&#8217;s business logic. Commands define actions associated with UI elements (such as buttons and menus), facilitating easy interaction between code and the UI through data binding. This article will provide a detailed explanation of the &hellip; <a href=\"https:\/\/atmokpo.com\/w\/37655\/\" class=\"more-link\">\ub354 \ubcf4\uae30<span class=\"screen-reader-text\"> &#8220;UWP Development, Command 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":[115],"tags":[],"class_list":["post-37655","post","type-post","status-publish","format-standard","hentry","category-uwp-programming"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.2 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>UWP Development, Command 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\/37655\/\" \/>\n<meta property=\"og:locale\" content=\"ko_KR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"UWP Development, Command Binding - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\" \/>\n<meta property=\"og:description\" content=\"Command binding in UWP (Universal Windows Platform) development is an important concept that connects the user interface (UI) with the application&#8217;s business logic. Commands define actions associated with UI elements (such as buttons and menus), facilitating easy interaction between code and the UI through data binding. This article will provide a detailed explanation of the &hellip; \ub354 \ubcf4\uae30 &quot;UWP Development, Command Binding&quot;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/atmokpo.com\/w\/37655\/\" \/>\n<meta property=\"og:site_name\" content=\"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\" \/>\n<meta property=\"article:published_time\" content=\"2024-11-01T09:59:20+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-11-01T11:01:50+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=\"4\ubd84\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/atmokpo.com\/w\/37655\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/atmokpo.com\/w\/37655\/\"},\"author\":{\"name\":\"root\",\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7\"},\"headline\":\"UWP Development, Command Binding\",\"datePublished\":\"2024-11-01T09:59:20+00:00\",\"dateModified\":\"2024-11-01T11:01:50+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/atmokpo.com\/w\/37655\/\"},\"wordCount\":528,\"publisher\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#organization\"},\"articleSection\":[\"UWP Programming\"],\"inLanguage\":\"ko-KR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/atmokpo.com\/w\/37655\/\",\"url\":\"https:\/\/atmokpo.com\/w\/37655\/\",\"name\":\"UWP Development, Command Binding - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\",\"isPartOf\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#website\"},\"datePublished\":\"2024-11-01T09:59:20+00:00\",\"dateModified\":\"2024-11-01T11:01:50+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/atmokpo.com\/w\/37655\/#breadcrumb\"},\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/atmokpo.com\/w\/37655\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/atmokpo.com\/w\/37655\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\ud648\",\"item\":\"https:\/\/atmokpo.com\/w\/en\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"UWP Development, Command 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":"UWP Development, Command 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\/37655\/","og_locale":"ko_KR","og_type":"article","og_title":"UWP Development, Command Binding - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","og_description":"Command binding in UWP (Universal Windows Platform) development is an important concept that connects the user interface (UI) with the application&#8217;s business logic. Commands define actions associated with UI elements (such as buttons and menus), facilitating easy interaction between code and the UI through data binding. This article will provide a detailed explanation of the &hellip; \ub354 \ubcf4\uae30 \"UWP Development, Command Binding\"","og_url":"https:\/\/atmokpo.com\/w\/37655\/","og_site_name":"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","article_published_time":"2024-11-01T09:59:20+00:00","article_modified_time":"2024-11-01T11:01:50+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":"4\ubd84"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/atmokpo.com\/w\/37655\/#article","isPartOf":{"@id":"https:\/\/atmokpo.com\/w\/37655\/"},"author":{"name":"root","@id":"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7"},"headline":"UWP Development, Command Binding","datePublished":"2024-11-01T09:59:20+00:00","dateModified":"2024-11-01T11:01:50+00:00","mainEntityOfPage":{"@id":"https:\/\/atmokpo.com\/w\/37655\/"},"wordCount":528,"publisher":{"@id":"https:\/\/atmokpo.com\/w\/#organization"},"articleSection":["UWP Programming"],"inLanguage":"ko-KR"},{"@type":"WebPage","@id":"https:\/\/atmokpo.com\/w\/37655\/","url":"https:\/\/atmokpo.com\/w\/37655\/","name":"UWP Development, Command Binding - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","isPartOf":{"@id":"https:\/\/atmokpo.com\/w\/#website"},"datePublished":"2024-11-01T09:59:20+00:00","dateModified":"2024-11-01T11:01:50+00:00","breadcrumb":{"@id":"https:\/\/atmokpo.com\/w\/37655\/#breadcrumb"},"inLanguage":"ko-KR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/atmokpo.com\/w\/37655\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/atmokpo.com\/w\/37655\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\ud648","item":"https:\/\/atmokpo.com\/w\/en\/"},{"@type":"ListItem","position":2,"name":"UWP Development, Command 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\/37655","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=37655"}],"version-history":[{"count":1,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/37655\/revisions"}],"predecessor-version":[{"id":37656,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/37655\/revisions\/37656"}],"wp:attachment":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/media?parent=37655"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/categories?post=37655"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/tags?post=37655"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}