using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.ComponentModel; using System.Xml; using System.Windows; namespace Xceed.Wpf.Documentation { public class XmlPropertyDescriptor : PropertyDescriptor { public XmlPropertyDescriptor( XmlDataGridItemProperty itemProperty ) : base( "None", null ) { if( itemProperty == null ) throw new ArgumentNullException( "itemProperty" ); m_itemProperty = itemProperty; } public override string DisplayName { get { return m_itemProperty.Name; } } public override bool CanResetValue( object component ) { return false; } public override Type ComponentType { get { return typeof( XmlElement ); } } public override object GetValue( object component ) { XmlElement node = component as XmlElement; if( node == null ) return null; object retval = null; XmlNode childNode = node.SelectSingleNode( m_itemProperty.Name ); if( childNode != null ) { retval = Convert.ChangeType( childNode.InnerText, this.PropertyType ); } return retval; } public override bool IsReadOnly { get { return false; } } public override Type PropertyType { get { return m_itemProperty.DataType; } } public override void ResetValue( object component ) { } public override void SetValue( object component, object value ) { XmlElement node = component as XmlElement; if( node == null ) return; node.SelectSingleNode( m_itemProperty.Name ).InnerText = value.ToString(); } public override bool ShouldSerializeValue( object component ) { return false; } private XmlDataGridItemProperty m_itemProperty; } }