LouisM1979
asked on
Accessing the contents of a databound Control
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
C# Code
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" />
...
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
...
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
There are a few choices for XML serialization:
XmlSerializer
http://msdn.microsoft.com/en-us/library/dsh84875(v=vs.110).aspx
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);
}
}
DataContractSerializer:
Serialization and Deserialization
http://msdn.microsoft.com/en-us/library/vstudio/ms731073(v=vs.100).aspx
Serialization and Deserialization
http://msdn.microsoft.com/en-us/library/vstudio/ms731073(v=vs.100).aspx
ASKER
Thanks.