Go Premium for a chance to win a PS4. Enter to Win

x
?
Solved

Accessing the contents of a databound Control

Posted on 2013-12-03
4
Medium Priority
?
242 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 2000 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

Ask an Anonymous Question!

Don't feel intimidated by what you don't know. Ask your question anonymously. It's easy! Learn more and upgrade.

Question has a verified solution.

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

A long time ago (May 2011), I have written an article showing you how to create a DLL using Visual Studio 2005 to be hosted in SQL Server 2005. That was valid at that time and it is still valid if you are still using these versions. You can still re…
In real business world data are crucial and sometimes data are shared among different information systems. Hence, an agreeable file transfer protocol need to be established.
This course is ideal for IT System Administrators working with VMware vSphere and its associated products in their company infrastructure. This course teaches you how to install and maintain this virtualization technology to store data, prevent vuln…
Are you ready to place your question in front of subject-matter experts for more timely responses? With the release of Priority Question, Premium Members, Team Accounts and Qualified Experts can now identify the emergent level of their issue, signal…
Suggested Courses

963 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