Create Data-Aware Applications in “Avalon”—the Windows Presentation Foundation

n the first article in this series, I discussed how to create Windows Presentation Foundation (WPF; code named Avalon) applications using XAML. In a follow-up article, I discussed the new navigational model in WPF. In this third installment, I will explore another important concept in WPF programming?data binding.

In WPF you can bind UI elements to a wide variety of data sources, including XML data, Web services, as well as databases. Data binding is a big topic in WPF and it is beyond the scope of this article to discuss every nook and cranny of data binding. To keep things manageable, I will show you how you can data bind a typical WPF application to an XML data source and explain the nuts and bolts behind it. To make the example useful, I will build a simple RSS reader that accepts an RSS XML document and displays the various items in the document using data binding. Figure 1 shows the completed application.

Binding to a Static XML Source
To build the sample application in this article, you need Visual Studio 2005 Beta 2 with the WinFX SDK installed. Using Visual Studio 2005 Beta 2, create a new AvalonNavigation application (see Figure 2). Name the application DataBinding and click OK.


Figure 1. The Avalon RSS Reader Application: In this example, the DevX New Articles RSS feed is used to generate the data for the sample application.
?
Figure 2. Creating a New AvalonNavigation Application: Start your project in Visual Studio in the usual way, choosing the AvalonNavigation type.

What You Need
  • Microsoft Visual Studio 2005
  • Microsoft Pre-Release Software: Windows Presentation Framework (“Avalon”) and Windows Communication Framework (“Indigo”) Beta1 RC
  • The WinFX SDK

In the default Page1.xaml, you will first build the UI of the application by populating the page with the relevant XAML elements.

First, add a element to the page and set its background color to “Cornsilk”:

   

Add a element to the page (see Listing 1). The element allows you to define an XML Data source (also known as XML data island) to be used for this application. In this case, the XML source is an RSS document. The XPath attribute is set to “/rss/channel” as the starting node of the document tree so that later on you can simply refer to the child elements using relative paths. The XML data source is given the key RSSData. The code is shown in Listing 1.

Next, add a element to the element. The element is used to bind the content of the XML data island with a control (in this case the TextBlock control). The TextBlock data template is bound to the element (of the XML tree) and given the name RSSTemplate:</p> <pre><code> <DataTemplate x:Key="RSSTemplate"> <TextBlock FontSize="Small"> <TextBlock.TextContent> <Binding XPath="title"/> </TextBlock.TextContent> </TextBlock> </DataTemplate> </DockPanel.Resources></code></pre> <p>Next, you will display a header (“Titles”) on your page, as well as create a ListBox control to display all the titles (encapsulated within the <title> element) in the XML data island (see <a href="javascript:showSupportItem('figure3')">Figure 3</a>). Note that you use the ItemsSource attribute to indicate the data source (<span class="pf">Binding Source={StaticResource RSSData}</span>, which is known as the compact binding expression) and the node at which to start looking (<span class="pf">XPath=item</span>). </p> <p>You use the ItemTemplate attribute to apply a template to the control (<span class="pf">{StaticResource RSSTemplate}</span>). Finally, when a selection in the ListBox control changes, the TitleChanged event is fired (as specified in the SelectionChanged attribute):</p> <pre><code> <StackPanel> <TextBlock DockPanel.Dock="Left" FontSize="18" FontWeight="Bold" Margin="10" HorizontalAlignment="Left"> Titles </TextBlock> <ListBox HorizontalAlignment="Left" Margin="10,0,10,10" Width="300" Background="LightYellow" ItemsSource="{Binding Source={StaticResource RSSData}, XPath=item}" ItemTemplate="{StaticResource RSSTemplate}" SelectionChanged="TitleChanged" /> </StackPanel></code></pre> <table border="0" cellspacing="0" cellpadding="5" align="right" width="239"> <tr> <td valign="top"><a href="javascript:showSupportItem('figure3')"><img decoding="async" loading="lazy" border="0" alt="" src="/assets/articlefigs/13771.jpg" width="220" height="150"></a></td> <td width="12"> </td> </tr> <tr> <td class="smallfont"><a href="javascript:showSupportItem('figure3')"><strong>Figure 3</strong>.</a> Binding XML Data to Data Controls: The XML for the RSS feed is bound to data controls in the application code. </td> </tr> </table> <p>When an item in the ListBox control is selected, the application displays the description of the item on the right-hand side of the page. In the next step you want to display the header (“Description”), followed by a <DockPanel> element containing a <TextBlock> element bound to the description element (<span class="pf">{Binding XPath=description}</span>). A second <DockPanel> element is used to display the URL associated (<span class="pf">{Binding XPath=link}</span>) with the selected item (see <a href="javascript:showSupportItem('figure4')">Figure 4</a>):</p> <pre><code> <StackPanel> <TextBlock DockPanel.Dock="Left" FontSize="18" FontWeight="Bold" Margin="10" HorizontalAlignment="Left"> Description </TextBlock> <DockPanel HorizontalAlignment="Left" Name="dpDescription" Width="500"> <TextBlock Name="txtDescription" DockPanel.Dock="Top" FontSize="Small" HorizontalAlignment="Left" TextWrap="wrap" Margin="10,0,10,10" Background="Black" Foreground="White" TextContent="{Binding XPath=description}" /> </DockPanel> <DockPanel HorizontalAlignment="Left" Name="dpURL" Width="500"> <TextBlock Name="txtURL" DockPanel.Dock="Top" FontSize="Small" HorizontalAlignment="Left" TextWrap="wrap" TextContent="{Binding XPath=link}" Margin="10,10,10,10" Foreground="Blue"/> </DockPanel> </StackPanel> </DockPanel></Page></code></pre> <table border="0" cellspacing="0" cellpadding="5" align="right" width="239"> <tr> <td valign="top"><a href="javascript:showSupportItem('figure4')"><img decoding="async" loading="lazy" border="0" alt="" src="/assets/articlefigs/13772.jpg" width="220" height="150"></a></td> <td width="12"> </td> </tr> <tr> <td class="smallfont"><a href="javascript:showSupportItem('figure4')"><strong>Figure 4</strong>.</a> Displaying Detailed Description: The description and link for the selected RSS item are bound to the TextBlock controls. They are changed whenever the user selects an item in the ListBox control.</td> </tr> </table> <p>Finally, you need to service the <span class="pf">TitleChanged()</span> event that you specified earlier. In this event, you will change the DataContext property of the <span class="pf">dpDescription</span> and <span class="pf">dpURL</span> <DockPanel> elements whenever the user selects an item in the ListBox controls:</p> <pre><code>Partial Public Class Page1 Inherits Page Private Sub TitleChanged(ByVal sender As Object, _ ByVal args As SelectionChangedEventArgs) Dim lstbox As ListBox = sender If lstbox.SelectedItem IsNot Nothing Then dpDescription.DataContext = _ lstbox.SelectedItem dpURL.DataContext = lstbox.SelectedItem End If End SubEnd Class</code></pre> <p>That’s it! Press F5 to test the application. The items in the RSS XML document are displayed in the ListBox control. You can click on the items in the ListBox control to make the corresponding description and URL show up on the right side of the page (see <a href="javascript:showSupportItem('figure1')">Figure 1</a>). </p> <p><strong>Binding to an External XML Source</strong><br />The previous example shows how you can bind an XML data island to the various controls in your WPF application. One problem with using an XML data island within the application is that any changes to the XML data will require the application to be modified/compiled. A better approach would be to store the XML data in an external file and then reference it within the application. For example, you could save the XML data in a file called RSS.xml and then reference it within the application as:</p> <pre><code> <XmlDataSource x:Key="RSSData" Source="RSS.xml" XPath="/rss/channel" /></code></pre> <p><strong>Dynamically Loading the XML Source</strong><br />While you can reference an external XML file, a better approach would be to dynamically load the XML document from a URL. In this case, you would modify your <XmlDataSource> element as:</p> <pre><code> <XmlDataSource x:Key="RSSData" Source="http://services.devx.com/outgoing/devxfeed.xml" XPath="/rss/channel" /></code></pre> <p>Try using the following URLs and see that the application loads a different set of RSS items each time:</p> <ul> <li> <a href='http://services.devx.com/outgoing/dotnet.xml' target='_blank'>http://services.devx.com/outgoing/dotnet.xml</a></li> <li> <a href='http://services.devx.com/outgoing/wirelessfeed.xml' target='_blank'>http://services.devx.com/outgoing/wirelessfeed.xml</a> </li> <li> <a href='http://services.devx.com/outgoing/enterprisefeed.xml' target='_blank'>http://services.devx.com/outgoing/enterprisefeed.xml</a> </li> <li> <a href='http://services.devx.com/outgoing/xmlfeed.xml' target='_blank'>http://services.devx.com/outgoing/xmlfeed.xml</a> </li> </ul> <p><strong>Going Further</strong><br />In this article, you have seen how data-binding works in WPF. For those who want to take the sample application further, consider modifying the application to allow users to select from a list of URLs (instead of manually modifying the source of the XML document). Otherwise, I encourage you to download the sample code and see for yourself how data binding works in WPF. </p> <p> </div> </div> <div class="elementor-element elementor-element-4f9883d elementor-widget elementor-widget-post-navigation" data-id="4f9883d" data-element_type="widget" data-widget_type="post-navigation.default"> <div class="elementor-widget-container"> <div class="elementor-post-navigation"> <div class="elementor-post-navigation__prev elementor-post-navigation__link"> <a href="https://www.devx.com/tip-bank/29136/" rel="prev"><span class="elementor-post-navigation__link__prev"><span class="post-navigation__prev--label">Previous</span></span></a> </div> <div class="elementor-post-navigation__next elementor-post-navigation__link"> <a href="https://www.devx.com/dotnet-zone/29150/" rel="next"><span class="elementor-post-navigation__link__next"><span class="post-navigation__next--label">Next</span></span></a> </div> </div> </div> </div> <section class="elementor-section elementor-inner-section elementor-element elementor-element-277ab1 elementor-section-full_width elementor-section-content-middle elementor-section-height-default elementor-section-height-default" data-id="277ab1" data-element_type="section"> <div class="elementor-container elementor-column-gap-no"> <div class="elementor-column elementor-col-50 elementor-inner-column elementor-element elementor-element-584e67da" data-id="584e67da" data-element_type="column"> <div class="elementor-widget-wrap elementor-element-populated"> <div class="elementor-element elementor-element-2bf5b4bc elementor-widget elementor-widget-heading" data-id="2bf5b4bc" data-element_type="widget" data-widget_type="heading.default"> <div class="elementor-widget-container"> <span class="elementor-heading-title elementor-size-default">Share the Post:</span> </div> </div> </div> </div> <div class="elementor-column elementor-col-50 elementor-inner-column elementor-element elementor-element-2288ce90" data-id="2288ce90" data-element_type="column"> <div class="elementor-widget-wrap elementor-element-populated"> <div class="elementor-element elementor-element-496b8f65 elementor-share-buttons--view-icon elementor-share-buttons--skin-minimal elementor-share-buttons--color-custom elementor-share-buttons--shape-square elementor-grid-0 elementor-widget elementor-widget-share-buttons" data-id="496b8f65" data-element_type="widget" data-widget_type="share-buttons.default"> <div class="elementor-widget-container"> <link rel="stylesheet" href="https://www.devx.com/wp-content/plugins/elementor-pro/assets/css/widget-share-buttons.min.css"> <div class="elementor-grid"> <div class="elementor-grid-item"> <div class="elementor-share-btn elementor-share-btn_facebook"> <span class="elementor-share-btn__icon"> <i class="fab fa-facebook" aria-hidden="true"></i> <span class="elementor-screen-only">Share on facebook</span> </span> </div> </div> <div class="elementor-grid-item"> <div class="elementor-share-btn elementor-share-btn_twitter"> <span class="elementor-share-btn__icon"> <i class="fab fa-twitter" aria-hidden="true"></i> <span class="elementor-screen-only">Share on twitter</span> </span> </div> </div> <div class="elementor-grid-item"> <div class="elementor-share-btn elementor-share-btn_linkedin"> <span class="elementor-share-btn__icon"> <i class="fab fa-linkedin" aria-hidden="true"></i> <span class="elementor-screen-only">Share on linkedin</span> </span> </div> </div> </div> </div> </div> </div> </div> </div> </section> </div> </div> <div class="elementor-column elementor-col-50 elementor-top-column elementor-element elementor-element-8905b95" data-id="8905b95" data-element_type="column"> <div class="elementor-widget-wrap elementor-element-populated"> <div class="elementor-element elementor-element-46d69df elementor-widget elementor-widget-html" data-id="46d69df" data-element_type="widget" data-widget_type="html.default"> <div class="elementor-widget-container"> <iframe id="JotFormIFrame-230167013128041" title="Daily Technology News Straight to Your Inbox" onload="window.parent.scrollTo(0,0)" allowtransparency="true" allowfullscreen="true" allow="geolocation; microphone; camera" src="https://form.jotform.com/230167013128041" frameborder="0" style=" min-width: 100%; height:539px; border:none;" scrolling="no" > </iframe> <script type="text/javascript"> var ifr = document.getElementById("JotFormIFrame-230167013128041"); if (ifr) { var src = ifr.src; var iframeParams = []; if (window.location.href && window.location.href.indexOf("?") > -1) { iframeParams = iframeParams.concat(window.location.href.substr(window.location.href.indexOf("?") + 1).split('&')); } if (src && src.indexOf("?") > -1) { iframeParams = iframeParams.concat(src.substr(src.indexOf("?") + 1).split("&")); src = src.substr(0, src.indexOf("?")) } iframeParams.push("isIframeEmbed=1"); ifr.src = src + "?" + iframeParams.join('&'); } window.handleIFrameMessage = function(e) { if (typeof e.data === 'object') { return; } var args = e.data.split(":"); if (args.length > 2) { iframe = document.getElementById("JotFormIFrame-" + args[(args.length - 1)]); } else { iframe = document.getElementById("JotFormIFrame"); } if (!iframe) { return; } switch (args[0]) { case "scrollIntoView": iframe.scrollIntoView(); break; case "setHeight": iframe.style.height = args[1] + "px"; if (!isNaN(args[1]) && parseInt(iframe.style.minHeight) > parseInt(args[1])) { iframe.style.minHeight = args[1] + "px"; } break; case "collapseErrorPage": if (iframe.clientHeight > window.innerHeight) { iframe.style.height = window.innerHeight + "px"; } break; case "reloadPage": window.location.reload(); break; case "loadScript": if( !window.isPermitted(e.origin, ['jotform.com', 'jotform.pro']) ) { break; } var src = args[1]; if (args.length > 3) { src = args[1] + ':' + args[2]; } var script = document.createElement('script'); script.src = src; script.type = 'text/javascript'; document.body.appendChild(script); break; case "exitFullscreen": if (window.document.exitFullscreen) window.document.exitFullscreen(); else if (window.document.mozCancelFullScreen) window.document.mozCancelFullScreen(); else if (window.document.mozCancelFullscreen) window.document.mozCancelFullScreen(); else if (window.document.webkitExitFullscreen) window.document.webkitExitFullscreen(); else if (window.document.msExitFullscreen) window.document.msExitFullscreen(); break; } var isJotForm = (e.origin.indexOf("jotform") > -1) ? true : false; if(isJotForm && "contentWindow" in iframe && "postMessage" in iframe.contentWindow) { var urls = {"docurl":encodeURIComponent(document.URL),"referrer":encodeURIComponent(document.referrer)}; iframe.contentWindow.postMessage(JSON.stringify({"type":"urls","value":urls}), "*"); } }; window.isPermitted = function(originUrl, whitelisted_domains) { var url = document.createElement('a'); url.href = originUrl; var hostname = url.hostname; var result = false; if( typeof hostname !== 'undefined' ) { whitelisted_domains.forEach(function(element) { if( hostname.slice((-1 * element.length - 1)) === '.'.concat(element) || hostname === element ) { result = true; } }); return result; } }; if (window.addEventListener) { window.addEventListener("message", handleIFrameMessage, false); } else if (window.attachEvent) { window.attachEvent("onmessage", handleIFrameMessage); } </script> </div> </div> <div class="elementor-element elementor-element-87227ec elementor-hidden-tablet elementor-hidden-mobile elementor-toc--minimized-on-tablet elementor-widget elementor-widget-table-of-contents" data-id="87227ec" data-element_type="widget" data-settings="{"headings_by_tags":["h2"],"exclude_headings_by_selector":[],"marker_view":"bullets","sticky":"top","sticky_on":["desktop","tablet"],"sticky_offset":100,"sticky_parent":"yes","icon":{"value":"fas fa-circle","library":"fa-solid"},"minimize_box":"yes","minimized_on":"tablet","hierarchical_view":"yes","min_height":{"unit":"px","size":"","sizes":[]},"min_height_tablet":{"unit":"px","size":"","sizes":[]},"min_height_mobile":{"unit":"px","size":"","sizes":[]},"sticky_effects_offset":0}" data-widget_type="table-of-contents.default"> <div class="elementor-widget-container"> <style>/*! elementor-pro - v3.6.2 - 14-02-2022 */ .elementor-widget-table-of-contents .elementor-toc__header-title{color:var(--header-color)}.elementor-widget-table-of-contents.elementor-toc--collapsed .elementor-toc__toggle-button--collapse,.elementor-widget-table-of-contents:not(.elementor-toc--collapsed) .elementor-toc__toggle-button--expand{display:none}.elementor-widget-table-of-contents .elementor-widget-container{min-height:var(--box-min-height);border:var(--box-border-width,1px) solid var(--box-border-color,#a4afb7);border-radius:var(--box-border-radius,3px);background-color:var(--box-background-color);-webkit-transition:min-height .4s;-o-transition:min-height .4s;transition:min-height .4s;overflow:hidden}.elementor-toc__header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:var(--box-padding,20px);background-color:var(--header-background-color);border-bottom:var(--separator-width,1px) solid var(--box-border-color,#a4afb7)}.elementor-toc__header-title{font-size:18px;margin:0;color:var(--header-color)}.elementor-toc__toggle-button{cursor:pointer;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex}.elementor-toc__toggle-button i{color:var(--toggle-button-color)}.elementor-toc__toggle-button svg{height:1em;width:1em;fill:var(--toggle-button-color)}.elementor-toc__spinner-container{text-align:center}.elementor-toc__spinner{font-size:2em}.elementor-toc__spinner.e-font-icon-svg{height:1em;width:1em}.elementor-toc__body{padding:var(--box-padding,20px);max-height:var(--toc-body-max-height);overflow-y:auto}.elementor-toc__body::-webkit-scrollbar{width:7px}.elementor-toc__body::-webkit-scrollbar-thumb{background-color:#c2cbd2;border-radius:10px}.elementor-toc__list-wrapper{list-style:none;padding:0}.elementor-toc__list-item{margin-bottom:.5em}.elementor-toc__list-item.elementor-item-active{font-weight:700}.elementor-toc__list-item .elementor-toc__list-wrapper{margin-top:.5em;margin-left:var(--nested-list-indent,1em)}.elementor-toc__list-item-text:hover{color:var(--item-text-hover-color);-webkit-text-decoration:var(--item-text-hover-decoration);text-decoration:var(--item-text-hover-decoration)}.elementor-toc__list-item-text.elementor-item-active{color:var(--item-text-active-color);-webkit-text-decoration:var(--item-text-active-decoration);text-decoration:var(--item-text-active-decoration)}.elementor-toc__list-item-text-wrapper{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.elementor-toc__list-item-text-wrapper:before,.elementor-toc__list-item-text-wrapper i{margin-right:8px;color:var(--marker-color)}.elementor-toc__list-item-text-wrapper svg{margin-right:8px;fill:var(--marker-color);height:var(--marker-size,.5em);width:var(--marker-size,.5em)}.elementor-toc__list-item-text-wrapper i{font-size:var(--marker-size,.5em)}.elementor-toc__list-item-text-wrapper:before{font-size:var(--marker-size,1em)}.elementor-toc--content-ellipsis .elementor-toc__list-item-text{white-space:nowrap;overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis}.elementor-toc__list-items--collapsible>.elementor-toc__list-wrapper>.elementor-toc__list-item>.elementor-toc__list-wrapper{display:none}.elementor-toc__heading-anchor{position:absolute}.elementor-toc__body .elementor-toc__list-item-text{color:var(--item-text-color);-webkit-text-decoration:var(--item-text-decoration);text-decoration:var(--item-text-decoration)}.elementor-toc__body .elementor-toc__list-item-text:hover{color:var(--item-text-hover-color);-webkit-text-decoration:var(--item-text-hover-decoration);text-decoration:var(--item-text-hover-decoration)}.elementor-toc__body .elementor-toc__list-item-text.elementor-item-active{color:var(--item-text-active-color);-webkit-text-decoration:var(--item-text-active-decoration);text-decoration:var(--item-text-active-decoration)}ol.elementor-toc__list-wrapper{counter-reset:item}ol.elementor-toc__list-wrapper .elementor-toc__list-item{counter-increment:item}ol.elementor-toc__list-wrapper .elementor-toc__list-item-text-wrapper:before{content:counters(item,".") ". "}@media only screen and (max-width:-1px){.elementor-toc--minimized-on-tablet_extra .elementor-toc__body{display:none}}@media only screen and (max-width:1024px){.elementor-toc--minimized-on-tablet .elementor-toc__body{display:none}}@media only screen and (max-width:-1px){.elementor-toc--minimized-on-mobile_extra .elementor-toc__body{display:none}}@media only screen and (max-width:767px){.elementor-toc--minimized-on-mobile .elementor-toc__body{display:none}}</style> <div class="elementor-toc__header"> <h4 class="elementor-toc__header-title"> Overview </h4> <div class="elementor-toc__toggle-button elementor-toc__toggle-button--expand"><i class="fas fa-chevron-down"></i></div> <div class="elementor-toc__toggle-button elementor-toc__toggle-button--collapse"><i class="fas fa-chevron-up"></i></div> </div> <div class="elementor-toc__body"> <div class="elementor-toc__spinner-container"> <i class="elementor-toc__spinner eicon-animation-spin eicon-loading" aria-hidden="true"></i> </div> </div> </div> </div> </div> </div> </div> </section> <section class="elementor-section elementor-top-section elementor-element elementor-element-7ef94119 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="7ef94119" data-element_type="section"> <div class="elementor-container elementor-column-gap-default"> <div class="elementor-column elementor-col-50 elementor-top-column elementor-element elementor-element-59974df2" data-id="59974df2" data-element_type="column"> <div class="elementor-widget-wrap elementor-element-populated"> <div class="elementor-element elementor-element-ab68ddb elementor-widget-divider--view-line elementor-widget elementor-widget-divider" data-id="ab68ddb" data-element_type="widget" data-widget_type="divider.default"> <div class="elementor-widget-container"> <style>/*! elementor - v3.5.5 - 03-02-2022 */ .elementor-widget-divider{--divider-border-style:none;--divider-border-width:1px;--divider-color:#2c2c2c;--divider-icon-size:20px;--divider-element-spacing:10px;--divider-pattern-height:24px;--divider-pattern-size:20px;--divider-pattern-url:none;--divider-pattern-repeat:repeat-x}.elementor-widget-divider .elementor-divider{display:-webkit-box;display:-ms-flexbox;display:flex}.elementor-widget-divider .elementor-divider__text{font-size:15px;line-height:1;max-width:95%}.elementor-widget-divider .elementor-divider__element{margin:0 var(--divider-element-spacing);-ms-flex-negative:0;flex-shrink:0}.elementor-widget-divider .elementor-icon{font-size:var(--divider-icon-size)}.elementor-widget-divider .elementor-divider-separator{display:-webkit-box;display:-ms-flexbox;display:flex;margin:0;direction:ltr}.elementor-widget-divider--view-line_icon .elementor-divider-separator,.elementor-widget-divider--view-line_text .elementor-divider-separator{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.elementor-widget-divider--view-line_icon .elementor-divider-separator:after,.elementor-widget-divider--view-line_icon .elementor-divider-separator:before,.elementor-widget-divider--view-line_text .elementor-divider-separator:after,.elementor-widget-divider--view-line_text .elementor-divider-separator:before{display:block;content:"";border-bottom:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;border-top:var(--divider-border-width) var(--divider-border-style) var(--divider-color)}.elementor-widget-divider--element-align-left .elementor-divider .elementor-divider-separator>.elementor-divider__svg:first-of-type{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:100;flex-shrink:100}.elementor-widget-divider--element-align-left .elementor-divider-separator:before{content:none}.elementor-widget-divider--element-align-left .elementor-divider__element{margin-left:0}.elementor-widget-divider--element-align-right .elementor-divider .elementor-divider-separator>.elementor-divider__svg:last-of-type{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:100;flex-shrink:100}.elementor-widget-divider--element-align-right .elementor-divider-separator:after{content:none}.elementor-widget-divider--element-align-right .elementor-divider__element{margin-right:0}.elementor-widget-divider:not(.elementor-widget-divider--view-line_text):not(.elementor-widget-divider--view-line_icon) .elementor-divider-separator{border-top:var(--divider-border-width) var(--divider-border-style) var(--divider-color)}.elementor-widget-divider--separator-type-pattern{--divider-border-style:none}.elementor-widget-divider--separator-type-pattern.elementor-widget-divider--view-line .elementor-divider-separator,.elementor-widget-divider--separator-type-pattern:not(.elementor-widget-divider--view-line) .elementor-divider-separator:after,.elementor-widget-divider--separator-type-pattern:not(.elementor-widget-divider--view-line) .elementor-divider-separator:before,.elementor-widget-divider--separator-type-pattern:not([class*=elementor-widget-divider--view]) .elementor-divider-separator{width:100%;min-height:var(--divider-pattern-height);-webkit-mask-size:var(--divider-pattern-size) 100%;mask-size:var(--divider-pattern-size) 100%;-webkit-mask-repeat:var(--divider-pattern-repeat);mask-repeat:var(--divider-pattern-repeat);background-color:var(--divider-color);-webkit-mask-image:var(--divider-pattern-url);mask-image:var(--divider-pattern-url)}.elementor-widget-divider--no-spacing{--divider-pattern-size:auto}.elementor-widget-divider--bg-round{--divider-pattern-repeat:round}.rtl .elementor-widget-divider .elementor-divider__text{direction:rtl}</style> <div class="elementor-divider"> <span class="elementor-divider-separator"> </span> </div> </div> </div> <div class="elementor-element elementor-element-2298c708 elementor-widget elementor-widget-heading" data-id="2298c708" data-element_type="widget" data-widget_type="heading.default"> <div class="elementor-widget-container"> <p class="elementor-heading-title elementor-size-default">Recent Articles:</p> </div> </div> <div class="elementor-element elementor-element-39bd7056 elementor-posts__hover-none elementor-grid-2 elementor-grid-tablet-2 elementor-grid-mobile-1 elementor-posts--thumbnail-top elementor-card-shadow-yes elementor-widget elementor-widget-posts" data-id="39bd7056" data-element_type="widget" data-settings="{"cards_row_gap":{"unit":"px","size":80,"sizes":[]},"cards_row_gap_tablet":{"unit":"px","size":71,"sizes":[]},"cards_row_gap_mobile":{"unit":"px","size":30,"sizes":[]},"cards_columns":"2","cards_columns_tablet":"2","cards_columns_mobile":"1"}" data-widget_type="posts.cards"> <div class="elementor-widget-container"> <link rel="stylesheet" href="https://www.devx.com/wp-content/plugins/elementor-pro/assets/css/widget-posts.min.css"> <div class="elementor-posts-container elementor-posts elementor-posts--skin-cards elementor-grid"> <article class="elementor-post elementor-grid-item post-24501 post type-post status-publish format-standard has-post-thumbnail hentry category-enterprise category-technology tag-mobile-wallets tag-online-banking tag-payments"> <div class="elementor-post__card"> <a class="elementor-post__thumbnail__link" href="https://www.devx.com/technology/technology-changed-traditional-payments/" ><div class="elementor-post__thumbnail"><img width="1708" height="2560" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" class="attachment-full size-full ewww_webp" alt="payment via phone" decoding="async" loading="lazy" sizes="(max-width: 1708px) 100vw, 1708px" data-src-img="https://www.devx.com/wp-content/uploads/payment-via-phone-scaled.jpg" data-src-webp="https://www.devx.com/wp-content/uploads/payment-via-phone-scaled.jpg.webp" data-srcset-webp="https://www.devx.com/wp-content/uploads/payment-via-phone-scaled.jpg.webp 1708w, https://www.devx.com/wp-content/uploads/payment-via-phone-200x300.jpg.webp 200w, https://www.devx.com/wp-content/uploads/payment-via-phone-683x1024.jpg.webp 683w, https://www.devx.com/wp-content/uploads/payment-via-phone-100x150.jpg.webp 100w, https://www.devx.com/wp-content/uploads/payment-via-phone-768x1151.jpg.webp 768w, https://www.devx.com/wp-content/uploads/payment-via-phone-1025x1536.jpg.webp 1025w, https://www.devx.com/wp-content/uploads/payment-via-phone-1367x2048.jpg.webp 1367w" data-srcset-img="https://www.devx.com/wp-content/uploads/payment-via-phone-scaled.jpg 1708w, https://www.devx.com/wp-content/uploads/payment-via-phone-200x300.jpg 200w, https://www.devx.com/wp-content/uploads/payment-via-phone-683x1024.jpg 683w, https://www.devx.com/wp-content/uploads/payment-via-phone-100x150.jpg 100w, https://www.devx.com/wp-content/uploads/payment-via-phone-768x1151.jpg 768w, https://www.devx.com/wp-content/uploads/payment-via-phone-1025x1536.jpg 1025w, https://www.devx.com/wp-content/uploads/payment-via-phone-1367x2048.jpg 1367w" data-eio="j" /><noscript><img width="1708" height="2560" src="https://www.devx.com/wp-content/uploads/payment-via-phone-scaled.jpg" class="attachment-full size-full" alt="payment via phone" decoding="async" loading="lazy" srcset="https://www.devx.com/wp-content/uploads/payment-via-phone-scaled.jpg 1708w, https://www.devx.com/wp-content/uploads/payment-via-phone-200x300.jpg 200w, https://www.devx.com/wp-content/uploads/payment-via-phone-683x1024.jpg 683w, https://www.devx.com/wp-content/uploads/payment-via-phone-100x150.jpg 100w, https://www.devx.com/wp-content/uploads/payment-via-phone-768x1151.jpg 768w, https://www.devx.com/wp-content/uploads/payment-via-phone-1025x1536.jpg 1025w, https://www.devx.com/wp-content/uploads/payment-via-phone-1367x2048.jpg 1367w" sizes="(max-width: 1708px) 100vw, 1708px" /></noscript></div></a> <div class="elementor-post__text"> <h4 class="elementor-post__title"> <a href="https://www.devx.com/technology/technology-changed-traditional-payments/" > 7 Ways Technology Has Changed Traditional Payments </a> </h4> <div class="elementor-post__excerpt"> <p>In today’s digital world, technology has changed how we make payments. From contactless cards to mobile wallets, it’s now easier</p> </div> </div> <div class="elementor-post__meta-data"> <span class="elementor-post-date"> January 26, 2023 </span> </div> </div> </article> <article class="elementor-post elementor-grid-item post-24326 post type-post status-publish format-standard has-post-thumbnail hentry category-data-access-and-management category-enterprise category-security tag-data-execution-protection"> <div class="elementor-post__card"> <a class="elementor-post__thumbnail__link" href="https://www.devx.com/data-access-and-management/data-execution-prevention-and-how-it-works/" ><div class="elementor-post__thumbnail"><img width="1920" height="1280" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" class="attachment-full size-full ewww_webp" alt="data execution protection" decoding="async" loading="lazy" sizes="(max-width: 1920px) 100vw, 1920px" data-src-img="https://www.devx.com/wp-content/uploads/data-execution-protection.jpg" data-src-webp="https://www.devx.com/wp-content/uploads/data-execution-protection.jpg.webp" data-srcset-webp="https://www.devx.com/wp-content/uploads/data-execution-protection.jpg.webp 1920w, https://www.devx.com/wp-content/uploads/data-execution-protection-300x200.jpg.webp 300w, https://www.devx.com/wp-content/uploads/data-execution-protection-1024x683.jpg.webp 1024w, https://www.devx.com/wp-content/uploads/data-execution-protection-150x100.jpg.webp 150w, https://www.devx.com/wp-content/uploads/data-execution-protection-768x512.jpg.webp 768w, https://www.devx.com/wp-content/uploads/data-execution-protection-1536x1024.jpg.webp 1536w" data-srcset-img="https://www.devx.com/wp-content/uploads/data-execution-protection.jpg 1920w, https://www.devx.com/wp-content/uploads/data-execution-protection-300x200.jpg 300w, https://www.devx.com/wp-content/uploads/data-execution-protection-1024x683.jpg 1024w, https://www.devx.com/wp-content/uploads/data-execution-protection-150x100.jpg 150w, https://www.devx.com/wp-content/uploads/data-execution-protection-768x512.jpg 768w, https://www.devx.com/wp-content/uploads/data-execution-protection-1536x1024.jpg 1536w" data-eio="j" /><noscript><img width="1920" height="1280" src="https://www.devx.com/wp-content/uploads/data-execution-protection.jpg" class="attachment-full size-full" alt="data execution protection" decoding="async" loading="lazy" srcset="https://www.devx.com/wp-content/uploads/data-execution-protection.jpg 1920w, https://www.devx.com/wp-content/uploads/data-execution-protection-300x200.jpg 300w, https://www.devx.com/wp-content/uploads/data-execution-protection-1024x683.jpg 1024w, https://www.devx.com/wp-content/uploads/data-execution-protection-150x100.jpg 150w, https://www.devx.com/wp-content/uploads/data-execution-protection-768x512.jpg 768w, https://www.devx.com/wp-content/uploads/data-execution-protection-1536x1024.jpg 1536w" sizes="(max-width: 1920px) 100vw, 1920px" /></noscript></div></a> <div class="elementor-post__text"> <h4 class="elementor-post__title"> <a href="https://www.devx.com/data-access-and-management/data-execution-prevention-and-how-it-works/" > Data Execution Prevention and How it Works </a> </h4> <div class="elementor-post__excerpt"> <p>No matter what you do or where you work, you are likely to encounter Windows software at some point or</p> </div> </div> <div class="elementor-post__meta-data"> <span class="elementor-post-date"> January 25, 2023 </span> </div> </div> </article> </div> </div> </div> </div> </div> <div class="elementor-column elementor-col-50 elementor-top-column elementor-element elementor-element-e055498" data-id="e055498" data-element_type="column"> <div class="elementor-widget-wrap"> </div> </div> </div> </section> </div> <footer data-elementor-type="footer" data-elementor-id="23300" class="elementor elementor-23300 elementor-location-footer" data-elementor-settings="[]"> <section class="elementor-section elementor-top-section elementor-element elementor-element-c97199d elementor-section-content-middle elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="c97199d" data-element_type="section" data-settings="{"background_background":"classic"}"> <div class="elementor-container elementor-column-gap-default"> <div class="elementor-column elementor-col-25 elementor-top-column elementor-element elementor-element-291c4e4" data-id="291c4e4" data-element_type="column"> <div class="elementor-widget-wrap"> </div> </div> <div class="elementor-column elementor-col-25 elementor-top-column elementor-element elementor-element-92d2c65" data-id="92d2c65" data-element_type="column"> <div class="elementor-widget-wrap elementor-element-populated"> <div class="elementor-element elementor-element-269b367 elementor-nav-menu__align-center elementor-nav-menu--dropdown-tablet elementor-nav-menu__text-align-aside elementor-nav-menu--toggle elementor-nav-menu--burger elementor-widget elementor-widget-nav-menu" data-id="269b367" data-element_type="widget" data-settings="{"layout":"horizontal","submenu_icon":{"value":"<i class=\"fas fa-caret-down\"><\/i>","library":"fa-solid"},"toggle":"burger"}" data-widget_type="nav-menu.default"> <div class="elementor-widget-container"> <nav migration_allowed="1" migrated="0" role="navigation" class="elementor-nav-menu--main elementor-nav-menu__container elementor-nav-menu--layout-horizontal e--pointer-underline e--animation-fade"> <ul id="menu-1-269b367" class="elementor-nav-menu"><li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-home menu-item-23808"><a href="https://www.devx.com/" class="elementor-item">Home</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-23809"><a href="https://www.devx.com/advertise/" class="elementor-item">Advertise</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-23816"><a href="https://www.devx.com/about/" class="elementor-item">About</a></li> </ul> </nav> <div class="elementor-menu-toggle" role="button" tabindex="0" aria-label="Menu Toggle" aria-expanded="false"> <i aria-hidden="true" role="presentation" class="elementor-menu-toggle__icon--open eicon-menu-bar"></i><i aria-hidden="true" role="presentation" class="elementor-menu-toggle__icon--close eicon-close"></i> <span class="elementor-screen-only">Menu</span> </div> <nav class="elementor-nav-menu--dropdown elementor-nav-menu__container" role="navigation" aria-hidden="true"> <ul id="menu-2-269b367" class="elementor-nav-menu"><li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-home menu-item-23808"><a href="https://www.devx.com/" class="elementor-item" tabindex="-1">Home</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-23809"><a href="https://www.devx.com/advertise/" class="elementor-item" tabindex="-1">Advertise</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-23816"><a href="https://www.devx.com/about/" class="elementor-item" tabindex="-1">About</a></li> </ul> </nav> </div> </div> </div> </div> <div class="elementor-column elementor-col-25 elementor-top-column elementor-element elementor-element-280ec0d" data-id="280ec0d" data-element_type="column"> <div class="elementor-widget-wrap elementor-element-populated"> <div class="elementor-element elementor-element-5d5f4dc5 elementor-shape-rounded elementor-grid-0 e-grid-align-center elementor-widget elementor-widget-social-icons" data-id="5d5f4dc5" data-element_type="widget" data-widget_type="social-icons.default"> <div class="elementor-widget-container"> <style>/*! elementor - v3.5.5 - 03-02-2022 */ .elementor-widget-social-icons.elementor-grid-0 .elementor-widget-container,.elementor-widget-social-icons.elementor-grid-mobile-0 .elementor-widget-container,.elementor-widget-social-icons.elementor-grid-tablet-0 .elementor-widget-container{line-height:1;font-size:0}.elementor-widget-social-icons:not(.elementor-grid-0):not(.elementor-grid-tablet-0):not(.elementor-grid-mobile-0) .elementor-grid{display:inline-grid}.elementor-widget-social-icons .elementor-grid{grid-column-gap:var(--grid-column-gap,5px);grid-row-gap:var(--grid-row-gap,5px);grid-template-columns:var(--grid-template-columns);-webkit-box-pack:var(--justify-content,center);-ms-flex-pack:var(--justify-content,center);justify-content:var(--justify-content,center);justify-items:var(--justify-content,center)}.elementor-icon.elementor-social-icon{font-size:var(--icon-size,25px);line-height:var(--icon-size,25px);width:calc(var(--icon-size, 25px) + (2 * var(--icon-padding, .5em)));height:calc(var(--icon-size, 25px) + (2 * var(--icon-padding, .5em)))}.elementor-social-icon{--e-social-icon-icon-color:#fff;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;background-color:#818a91;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;text-align:center;cursor:pointer}.elementor-social-icon i{color:var(--e-social-icon-icon-color)}.elementor-social-icon svg{fill:var(--e-social-icon-icon-color)}.elementor-social-icon:last-child{margin:0}.elementor-social-icon:hover{opacity:.9;color:#fff}.elementor-social-icon-android{background-color:#a4c639}.elementor-social-icon-apple{background-color:#999}.elementor-social-icon-behance{background-color:#1769ff}.elementor-social-icon-bitbucket{background-color:#205081}.elementor-social-icon-codepen{background-color:#000}.elementor-social-icon-delicious{background-color:#39f}.elementor-social-icon-deviantart{background-color:#05cc47}.elementor-social-icon-digg{background-color:#005be2}.elementor-social-icon-dribbble{background-color:#ea4c89}.elementor-social-icon-elementor{background-color:#d30c5c}.elementor-social-icon-envelope{background-color:#ea4335}.elementor-social-icon-facebook,.elementor-social-icon-facebook-f{background-color:#3b5998}.elementor-social-icon-flickr{background-color:#0063dc}.elementor-social-icon-foursquare{background-color:#2d5be3}.elementor-social-icon-free-code-camp,.elementor-social-icon-freecodecamp{background-color:#006400}.elementor-social-icon-github{background-color:#333}.elementor-social-icon-gitlab{background-color:#e24329}.elementor-social-icon-globe{background-color:#818a91}.elementor-social-icon-google-plus,.elementor-social-icon-google-plus-g{background-color:#dd4b39}.elementor-social-icon-houzz{background-color:#7ac142}.elementor-social-icon-instagram{background-color:#262626}.elementor-social-icon-jsfiddle{background-color:#487aa2}.elementor-social-icon-link{background-color:#818a91}.elementor-social-icon-linkedin,.elementor-social-icon-linkedin-in{background-color:#0077b5}.elementor-social-icon-medium{background-color:#00ab6b}.elementor-social-icon-meetup{background-color:#ec1c40}.elementor-social-icon-mixcloud{background-color:#273a4b}.elementor-social-icon-odnoklassniki{background-color:#f4731c}.elementor-social-icon-pinterest{background-color:#bd081c}.elementor-social-icon-product-hunt{background-color:#da552f}.elementor-social-icon-reddit{background-color:#ff4500}.elementor-social-icon-rss{background-color:#f26522}.elementor-social-icon-shopping-cart{background-color:#4caf50}.elementor-social-icon-skype{background-color:#00aff0}.elementor-social-icon-slideshare{background-color:#0077b5}.elementor-social-icon-snapchat{background-color:#fffc00}.elementor-social-icon-soundcloud{background-color:#f80}.elementor-social-icon-spotify{background-color:#2ebd59}.elementor-social-icon-stack-overflow{background-color:#fe7a15}.elementor-social-icon-steam{background-color:#00adee}.elementor-social-icon-stumbleupon{background-color:#eb4924}.elementor-social-icon-telegram{background-color:#2ca5e0}.elementor-social-icon-thumb-tack{background-color:#1aa1d8}.elementor-social-icon-tripadvisor{background-color:#589442}.elementor-social-icon-tumblr{background-color:#35465c}.elementor-social-icon-twitch{background-color:#6441a5}.elementor-social-icon-twitter{background-color:#1da1f2}.elementor-social-icon-viber{background-color:#665cac}.elementor-social-icon-vimeo{background-color:#1ab7ea}.elementor-social-icon-vk{background-color:#45668e}.elementor-social-icon-weibo{background-color:#dd2430}.elementor-social-icon-weixin{background-color:#31a918}.elementor-social-icon-whatsapp{background-color:#25d366}.elementor-social-icon-wordpress{background-color:#21759b}.elementor-social-icon-xing{background-color:#026466}.elementor-social-icon-yelp{background-color:#af0606}.elementor-social-icon-youtube{background-color:#cd201f}.elementor-social-icon-500px{background-color:#0099e5}.elementor-shape-rounded .elementor-icon.elementor-social-icon{-webkit-border-radius:10%;border-radius:10%}.elementor-shape-circle .elementor-icon.elementor-social-icon{-webkit-border-radius:50%;border-radius:50%}</style> <div class="elementor-social-icons-wrapper elementor-grid"> <span class="elementor-grid-item"> <a class="elementor-icon elementor-social-icon elementor-social-icon-linkedin elementor-repeater-item-5c0ce3c" href="https://www.linkedin.com/company/devx" target="_blank"> <span class="elementor-screen-only">Linkedin</span> <i class="fab fa-linkedin"></i> </a> </span> <span class="elementor-grid-item"> <a class="elementor-icon elementor-social-icon elementor-social-icon-twitter elementor-repeater-item-828f132" href="https://twitter.com/DevX_Com" target="_blank"> <span class="elementor-screen-only">Twitter</span> <i class="fab fa-twitter"></i> </a> </span> </div> </div> </div> </div> </div> <div class="elementor-column elementor-col-25 elementor-top-column elementor-element elementor-element-47707c2" data-id="47707c2" data-element_type="column"> <div class="elementor-widget-wrap"> </div> </div> </div> </section> <footer class="elementor-section elementor-top-section elementor-element elementor-element-1588a538 elementor-section-height-min-height elementor-section-content-middle elementor-section-boxed elementor-section-height-default elementor-section-items-middle" data-id="1588a538" data-element_type="section" data-settings="{"background_background":"classic"}"> <div class="elementor-container elementor-column-gap-no"> <div class="elementor-column elementor-col-33 elementor-top-column elementor-element elementor-element-9d2a788" data-id="9d2a788" data-element_type="column"> <div class="elementor-widget-wrap"> </div> </div> <div class="elementor-column elementor-col-33 elementor-top-column elementor-element elementor-element-2e0ce949" data-id="2e0ce949" data-element_type="column"> <div class="elementor-widget-wrap elementor-element-populated"> <div class="elementor-element elementor-element-4a914653 elementor-widget elementor-widget-heading" data-id="4a914653" data-element_type="widget" data-widget_type="heading.default"> <div class="elementor-widget-container"> <p class="elementor-heading-title elementor-size-default">©2023 Copyright DevX - All Rights Reserved. Registration or use of this site constitutes acceptance of our Terms of Service and Privacy Policy.</p> </div> </div> <div class="elementor-element elementor-element-d2cf216 elementor-widget elementor-widget-text-editor" data-id="d2cf216" data-element_type="widget" data-widget_type="text-editor.default"> <div class="elementor-widget-container"> <style>/*! elementor - v3.5.5 - 03-02-2022 */ .elementor-widget-text-editor.elementor-drop-cap-view-stacked .elementor-drop-cap{background-color:#818a91;color:#fff}.elementor-widget-text-editor.elementor-drop-cap-view-framed .elementor-drop-cap{color:#818a91;border:3px solid;background-color:transparent}.elementor-widget-text-editor:not(.elementor-drop-cap-view-default) .elementor-drop-cap{margin-top:8px}.elementor-widget-text-editor:not(.elementor-drop-cap-view-default) .elementor-drop-cap-letter{width:1em;height:1em}.elementor-widget-text-editor .elementor-drop-cap{float:left;text-align:center;line-height:1;font-size:50px}.elementor-widget-text-editor .elementor-drop-cap-letter{display:inline-block}</style> <p><strong><a href="https://www.devx.com/sitemap/">Sitemap</a></strong></p> </div> </div> </div> </div> <div class="elementor-column elementor-col-33 elementor-top-column elementor-element elementor-element-5aef7f0" data-id="5aef7f0" data-element_type="column"> <div class="elementor-widget-wrap"> </div> </div> </div> </footer> <section class="elementor-section elementor-top-section elementor-element elementor-element-64311df elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="64311df" data-element_type="section"> <div class="elementor-container elementor-column-gap-default"> <div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-1e7467d" data-id="1e7467d" data-element_type="column"> <div class="elementor-widget-wrap"> </div> </div> </div> </section> </footer> <link rel='stylesheet' id='elementor-icons-fa-regular-css' href='https://www.devx.com/wp-content/plugins/elementor/assets/lib/font-awesome/css/regular.min.css?ver=5.15.3' type='text/css' media='all' /> <script type='text/javascript' src='https://www.devx.com/wp-content/themes/devxnew/assets/js/hello-frontend.min.js?ver=1.0.0' id='hello-theme-frontend-js'></script> <script type='text/javascript' src='https://www.devx.com/wp-content/plugins/elementor-pro/assets/lib/smartmenus/jquery.smartmenus.min.js?ver=1.0.1' id='smartmenus-js'></script> <script type='text/javascript' src='https://www.devx.com/wp-includes/js/imagesloaded.min.js?ver=4.1.4' id='imagesloaded-js'></script> <script type='text/javascript' src='https://www.devx.com/wp-content/plugins/elementor-pro/assets/js/webpack-pro.runtime.min.js?ver=3.6.2' id='elementor-pro-webpack-runtime-js'></script> <script type='text/javascript' src='https://www.devx.com/wp-content/plugins/elementor/assets/js/webpack.runtime.min.js?ver=3.5.5' id='elementor-webpack-runtime-js'></script> <script type='text/javascript' src='https://www.devx.com/wp-content/plugins/elementor/assets/js/frontend-modules.min.js?ver=3.5.5' id='elementor-frontend-modules-js'></script> <script type='text/javascript' src='https://www.devx.com/wp-includes/js/dist/vendor/regenerator-runtime.min.js?ver=0.13.9' id='regenerator-runtime-js'></script> <script type='text/javascript' src='https://www.devx.com/wp-includes/js/dist/vendor/wp-polyfill.min.js?ver=3.15.0' id='wp-polyfill-js'></script> <script type='text/javascript' src='https://www.devx.com/wp-includes/js/dist/hooks.min.js?ver=4169d3cf8e8d95a3d6d5' id='wp-hooks-js'></script> <script type='text/javascript' src='https://www.devx.com/wp-includes/js/dist/i18n.min.js?ver=9e794f35a71bb98672ae' id='wp-i18n-js'></script> <script type='text/javascript' id='wp-i18n-js-after'> wp.i18n.setLocaleData( { 'text direction\u0004ltr': [ 'ltr' ] } ); </script> <script type='text/javascript' id='elementor-pro-frontend-js-before'> var ElementorProFrontendConfig = {"ajaxurl":"https:\/\/www.devx.com\/wp-admin\/admin-ajax.php","nonce":"6d742312c2","urls":{"assets":"https:\/\/www.devx.com\/wp-content\/plugins\/elementor-pro\/assets\/","rest":"https:\/\/www.devx.com\/wp-json\/"},"shareButtonsNetworks":{"facebook":{"title":"Facebook","has_counter":true},"twitter":{"title":"Twitter"},"linkedin":{"title":"LinkedIn","has_counter":true},"pinterest":{"title":"Pinterest","has_counter":true},"reddit":{"title":"Reddit","has_counter":true},"vk":{"title":"VK","has_counter":true},"odnoklassniki":{"title":"OK","has_counter":true},"tumblr":{"title":"Tumblr"},"digg":{"title":"Digg"},"skype":{"title":"Skype"},"stumbleupon":{"title":"StumbleUpon","has_counter":true},"mix":{"title":"Mix"},"telegram":{"title":"Telegram"},"pocket":{"title":"Pocket","has_counter":true},"xing":{"title":"XING","has_counter":true},"whatsapp":{"title":"WhatsApp"},"email":{"title":"Email"},"print":{"title":"Print"}},"facebook_sdk":{"lang":"en_US","app_id":""},"lottie":{"defaultAnimationUrl":"https:\/\/www.devx.com\/wp-content\/plugins\/elementor-pro\/modules\/lottie\/assets\/animations\/default.json"}}; </script> <script type='text/javascript' src='https://www.devx.com/wp-content/plugins/elementor-pro/assets/js/frontend.min.js?ver=3.6.2' id='elementor-pro-frontend-js'></script> <script type='text/javascript' src='https://www.devx.com/wp-content/plugins/elementor/assets/lib/waypoints/waypoints.min.js?ver=4.0.2' id='elementor-waypoints-js'></script> <script type='text/javascript' src='https://www.devx.com/wp-includes/js/jquery/ui/core.min.js?ver=1.13.2' id='jquery-ui-core-js'></script> <script type='text/javascript' id='elementor-frontend-js-before'> var elementorFrontendConfig = {"environmentMode":{"edit":false,"wpPreview":false,"isScriptDebug":false},"i18n":{"shareOnFacebook":"Share on Facebook","shareOnTwitter":"Share on Twitter","pinIt":"Pin it","download":"Download","downloadImage":"Download image","fullscreen":"Fullscreen","zoom":"Zoom","share":"Share","playVideo":"Play Video","previous":"Previous","next":"Next","close":"Close"},"is_rtl":false,"breakpoints":{"xs":0,"sm":480,"md":768,"lg":1025,"xl":1440,"xxl":1600},"responsive":{"breakpoints":{"mobile":{"label":"Mobile","value":767,"default_value":767,"direction":"max","is_enabled":true},"mobile_extra":{"label":"Mobile Extra","value":880,"default_value":880,"direction":"max","is_enabled":false},"tablet":{"label":"Tablet","value":1024,"default_value":1024,"direction":"max","is_enabled":true},"tablet_extra":{"label":"Tablet Extra","value":1200,"default_value":1200,"direction":"max","is_enabled":false},"laptop":{"label":"Laptop","value":1366,"default_value":1366,"direction":"max","is_enabled":false},"widescreen":{"label":"Widescreen","value":2400,"default_value":2400,"direction":"min","is_enabled":false}}},"version":"3.5.5","is_static":false,"experimentalFeatures":{"e_dom_optimization":true,"e_optimized_assets_loading":true,"e_optimized_css_loading":true,"a11y_improvements":true,"e_import_export":true,"additional_custom_breakpoints":true,"e_hidden_wordpress_widgets":true,"theme_builder_v2":true,"hello-theme-header-footer":true,"landing-pages":true,"elements-color-picker":true,"favorite-widgets":true,"admin-top-bar":true,"page-transitions":true,"form-submissions":true,"e_scroll_snap":true},"urls":{"assets":"https:\/\/www.devx.com\/wp-content\/plugins\/elementor\/assets\/"},"settings":{"page":[],"editorPreferences":[]},"kit":{"body_background_background":"classic","active_breakpoints":["viewport_mobile","viewport_tablet"],"global_image_lightbox":"yes","lightbox_enable_counter":"yes","lightbox_enable_fullscreen":"yes","lightbox_enable_zoom":"yes","lightbox_enable_share":"yes","lightbox_title_src":"title","lightbox_description_src":"description","hello_header_logo_type":"logo","hello_header_menu_layout":"horizontal","hello_footer_logo_type":"logo"},"post":{"id":1728,"title":"Create%20Data-Aware%20Applications%20in%20%22Avalon%22%26%23151%3Bthe%20Windows%20Presentation%20Foundation%20-%20DevX","excerpt":"","featuredImage":"https:\/\/www.devx.com\/wp-content\/uploads\/2022\/02\/thumbnail.jpg"}}; </script> <script type='text/javascript' src='https://www.devx.com/wp-content/plugins/elementor/assets/js/frontend.min.js?ver=3.5.5' id='elementor-frontend-js'></script> <script type='text/javascript' src='https://www.devx.com/wp-content/plugins/elementor-pro/assets/js/elements-handlers.min.js?ver=3.6.2' id='pro-elements-handlers-js'></script> <script type='text/javascript' src='https://www.devx.com/wp-content/plugins/elementor-pro/assets/lib/sticky/jquery.sticky.min.js?ver=3.6.2' id='e-sticky-js'></script> </body> </html> <!-- Dynamic page generated in 1.134 seconds. --> <!-- Cached page generated by WP-Super-Cache on 2023-01-29 16:21:26 --> <!-- Compression = gzip -->