Binding data with WCF Service in WPF Hierarchical Navigator
19 Dec 20227 minutes to read
XML data can be bound through WCF Services by using a WPF application enabled with WCF Services.
The steps to bind XML data with WCF Services are as follows:
- Create the XML and class objects (for WCF, refer the XML data-binding class and the XML used in the Binding XML data section).
- Add an ASP.NET Web application to the sample application, and then add a new WCF Service item to the Web application, to create a WCF Service application.
-
Create an Observable Collection from XML data to bind with ItemsSource, as shown below in the service class that has a return type of ObservableCollection.
[ServiceContract(Namespace = "")] [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] public class Service1 { [OperationContract] public ObservableCollection<HierarchyItem> CreateXMLDataItems() { ObservableCollection<HierarchyItem> categories = new ObservableCollection<HierarchyItem>(); XDocument XMLItemSource = XDocument.Load("YourXMLLocation/HierarchyItems.xml"); categories = this.GetCategories(XMLItemSource.Element("categories")); return categories; } private ObservableCollection<HierarchyItem> GetCategories(XElement element) { var item = from category in element.Elements("category") select category; var itemsObservableCollection = new ObservableCollection<HierarchyItem>(); foreach (var itm in item) { var subitm = new HierarchyItem(); subitm.ContentStr = itm.Attribute("name").Value; subitm.HierarchyItems = this.GetCategories(itm); itemsObservableCollection.Add(subitm); } return itemsObservableCollection; } }
-
Connect WCF Services with the sample application, as shown in the following code snippet:
namespace WCFServicesInHierarchy { public partial class MainPage : UserControl { public MainPage() { InitializeComponent(); } } public class CustomSource { public CustomSource() { //This loads WCF Service Service1Client client = new Service1Client(); client.CreateXMLDataItemsCompleted += new EventHandler<CreateXMLDataItemsCompletedEventArgs>(client_CreateXMLDataItemsCompleted); client.CreateXMLDataItemsAsync(); this.Categories = new ObservableCollection<HierarchyItem>(); } private void client_CreateXMLDataItemsCompleted(object sender, CreateXMLDataItemsCompletedEventArgs e) { if (e.Error == null && e.Result != null) { foreach (HierarchyItem c in e.Result) { this.Categories.Add(c); } } } public ObservableCollection<HierarchyItem> Categories { get; set; } }}
<Window<br> xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"<br> xmlns:syncfusion="http://schemas.syncfusion.com/wpf"<br> xmlns:local="clr-namespace:WCFServicesInHierarchy" <br> x:Class="WCFServicesInHierarchy.MainWindow"<br>x:Name="Window" Title="MainWindow" UseLayoutRounding="True" Width="640" Height="480"><br> <Window.DataContext><br> <local:CustomSource/><br> </Window.DataContext><br><br> <Grid x:Name="LayoutRoot"><br> <syncfusion:HierarchyNavigator Name="hierarchyNavigator1" VerticalAlignment="Center" ItemsSource="{Binding Categories}"><br> <syncfusion:HierarchyNavigator.ItemTemplate><br> <HierarchicalDataTemplate ItemsSource="{Binding HierarchyItems}"><br> <Border><br> <TextBlock Text="{Binding ContentStr}" Margin="2,0"/><br> </Border><br> </HierarchicalDataTemplate><br> </syncfusion:HierarchyNavigator.ItemTemplate><br> </syncfusion:HierarchyNavigator><br> </Grid><br> </Window>