Solved

Accessing the contents of a databound Control

Posted on 2013-12-03
4
235 Views
Last Modified: 2013-12-04
I am trying to access the contents of some labels that are databound to XML through the XAML declarations. These are readonly fields. Basically I get a date and time into one label from the XML document. I want to be able to read what that date time is on the backend so that when then form is loaded/activated/whatever a combobox will add new items based on the time (basically settings a reminder). When I access the contents they are "".

I am new to C# but doing ok. This is my first time though doing anything with Databinding. I have spent the last few days scouring the web and this is the best implementation that I can arrive at.

Here is the XAML and some code.

XAML
...
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition/>
        </Grid.RowDefinitions>

        <Grid.DataContext>
            <XmlDataProvider Source="ConfigSettings.xml" XPath="Settings/Setting" />
        </Grid.DataContext>
        <Label x:Name="lblTitleData" Content="{Binding XPath=@Name}" Margin="10,10,10,0" />
        <Label x:Name="lblStartDateTimeData" Content="{Binding XPath=./StartDateTime}" HorizontalAlignment="Left" Margin="110,207,0,0" />
...

Open in new window


C# Code
...
            DateTime dteDateTime = DateTime.Now;

            // string strCombinedTime="";
            int intHoursTillEvent;

            TimeSpan ts = Convert.ToDateTime(lblStartDateTimeData.Content) - DateTime.Now;
            intHoursTillEvent = (ts.Days * 24) + ts.Hours;

            if (intHoursTillEvent >= 24)
            {
                cboReminderTime.Items.Clear();
                cboReminderTime.Items.Add("15 Minutes");
                cboReminderTime.Items.Add("1 Hour");
                cboReminderTime.Items.Add("3 Hours");
                cboReminderTime.Items.Add("6 Hours");
                cboReminderTime.Items.Add("12 Hours");
                cboReminderTime.Items.Add("24 Hours");
                cboReminderTime.Items.Add("Start Now");
            } // closes >= 24 hours
...

Open in new window

0
Comment
Question by:LouisM1979
  • 3
4 Comments
 
LVL 96

Accepted Solution

by:
Bob Learned earned 500 total points
ID: 39696217
I usually data-bind to a class, not the XmlDataProvider.  My choice would be to deserialize the XML into a class object, and bind the DataContext to that.
0
 

Author Closing Comment

by:LouisM1979
ID: 39696340
I will do that. By chance do you have a book or link you would reco for that? There is a lot on Google and it gets confusing at times.

Thanks.
0
 
LVL 96

Expert Comment

by:Bob Learned
ID: 39696369
There are a few choices for XML serialization:

XmlSerializer

http://msdn.microsoft.com/en-us/library/dsh84875(v=vs.110).aspx

using System;
using System.IO;
using System.Xml.Serialization;

// This is the class that will be deserialized. 
public class OrderedItem
{
   [XmlElement(Namespace = "http://www.cpandl.com")]
   public string ItemName;
   [XmlElement(Namespace = "http://www.cpandl.com")]
   public string Description;
   [XmlElement(Namespace="http://www.cohowinery.com")]
   public decimal UnitPrice;
   [XmlElement(Namespace = "http://www.cpandl.com")]
   public int Quantity;
   [XmlElement(Namespace="http://www.cohowinery.com")]
   public decimal LineTotal;
   // A custom method used to calculate price per item. 
   public void Calculate()
   {
      LineTotal = UnitPrice * Quantity;
   }
}

public class Test
{
   public static void Main()
   {
      Test t = new Test();
      // Read a purchase order.
      t.DeserializeObject("simple.xml");
   }

   private void DeserializeObject(string filename)
   {   
      Console.WriteLine("Reading with Stream");
      // Create an instance of the XmlSerializer.
      XmlSerializer serializer = 
      new XmlSerializer(typeof(OrderedItem));

      // Declare an object variable of the type to be deserialized.
      OrderedItem i;

      using (Stream reader = new FileStream(filename, FileMode.Open))
      {
          // Call the Deserialize method to restore the object's state.
          i = (OrderedItem)serializer.Deserialize(reader);          
      }

      // Write out the properties of the object.
      Console.Write(
      i.ItemName + "\t" +
      i.Description + "\t" +
      i.UnitPrice + "\t" +
      i.Quantity + "\t" +
      i.LineTotal);
   }
}

Open in new window

0
 
LVL 96

Expert Comment

by:Bob Learned
ID: 39696374
DataContractSerializer:


Serialization and Deserialization
http://msdn.microsoft.com/en-us/library/vstudio/ms731073(v=vs.100).aspx
0

Featured Post

Master Your Team's Linux and Cloud Stack!

The average business loses $13.5M per year to ineffective training (per 1,000 employees). Keep ahead of the competition and combine in-person quality with online cost and flexibility by training with Linux Academy.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
Video Player 11 23
C# bracket error 3 31
vb.net winforms sizing/resolution? 4 32
JSON  parse help 7 25
In my previous two articles we discussed Binary Serialization (http://www.experts-exchange.com/A_4362.html) and XML Serialization (http://www.experts-exchange.com/A_4425.html). In this article we will try to know more about SOAP (Simple Object Acces…
Real-time is more about the business, not the technology. In day-to-day life, to make real-time decisions like buying or investing, business needs the latest information(e.g. Gold Rate/Stock Rate). Unlike traditional days, you need not wait for a fe…
This tutorial gives a high-level tour of the interface of Marketo (a marketing automation tool to help businesses track and engage prospective customers and drive them to purchase). You will see the main areas including Marketing Activities, Design …
Two types of users will appreciate AOMEI Backupper Pro: 1 - Those with PCIe drives (and haven't found cloning software that works on them). 2 - Those who want a fast clone of their boot drive (no re-boots needed) and it can clone your drive wh…

770 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question