diff --git a/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit/CollectionControl/Implementation/PrimitiveTypeCollectionControl.cs b/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit/CollectionControl/Implementation/PrimitiveTypeCollectionControl.cs index a7b04b54..e8940875 100644 --- a/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit/CollectionControl/Implementation/PrimitiveTypeCollectionControl.cs +++ b/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit/CollectionControl/Implementation/PrimitiveTypeCollectionControl.cs @@ -25,299 +25,301 @@ COMMUNITY LICENSE AGREEMENT (for non-commercial use) as published at namespace Xceed.Wpf.Toolkit { - public class PrimitiveTypeCollectionControl : ContentControl - { - #region Members + public class PrimitiveTypeCollectionControl : ContentControl + { + #region Members - bool _surpressTextChanged; - bool _conversionFailed; + bool _surpressTextChanged; + bool _conversionFailed; - #endregion //Members + #endregion //Members - #region Properties + #region Properties - #region IsOpen + #region IsOpen - public static readonly DependencyProperty IsOpenProperty = DependencyProperty.Register( "IsOpen", typeof( bool ), typeof( PrimitiveTypeCollectionControl ), new UIPropertyMetadata( false, OnIsOpenChanged ) ); - public bool IsOpen - { - get - { - return ( bool )GetValue( IsOpenProperty ); - } - set - { - SetValue( IsOpenProperty, value ); - } - } + public static readonly DependencyProperty IsOpenProperty = DependencyProperty.Register("IsOpen", typeof(bool), typeof(PrimitiveTypeCollectionControl), new UIPropertyMetadata(false, OnIsOpenChanged)); + public bool IsOpen + { + get + { + return (bool)GetValue(IsOpenProperty); + } + set + { + SetValue(IsOpenProperty, value); + } + } - private static void OnIsOpenChanged( DependencyObject o, DependencyPropertyChangedEventArgs e ) - { - PrimitiveTypeCollectionControl primitiveTypeCollectionControl = o as PrimitiveTypeCollectionControl; - if( primitiveTypeCollectionControl != null ) - primitiveTypeCollectionControl.OnIsOpenChanged( ( bool )e.OldValue, ( bool )e.NewValue ); - } + private static void OnIsOpenChanged(DependencyObject o, DependencyPropertyChangedEventArgs e) + { + PrimitiveTypeCollectionControl primitiveTypeCollectionControl = o as PrimitiveTypeCollectionControl; + if (primitiveTypeCollectionControl != null) + primitiveTypeCollectionControl.OnIsOpenChanged((bool)e.OldValue, (bool)e.NewValue); + } - protected virtual void OnIsOpenChanged( bool oldValue, bool newValue ) - { + protected virtual void OnIsOpenChanged(bool oldValue, bool newValue) + { - } + } - #endregion //IsOpen + #endregion //IsOpen - #region ItemsSource + #region ItemsSource - public static readonly DependencyProperty ItemsSourceProperty = DependencyProperty.Register( "ItemsSource", typeof( IList ), typeof( PrimitiveTypeCollectionControl ), new UIPropertyMetadata( null, OnItemsSourceChanged ) ); - public IList ItemsSource - { - get - { - return ( IList )GetValue( ItemsSourceProperty ); - } - set - { - SetValue( ItemsSourceProperty, value ); - } - } + public static readonly DependencyProperty ItemsSourceProperty = DependencyProperty.Register("ItemsSource", typeof(IList), typeof(PrimitiveTypeCollectionControl), new UIPropertyMetadata(null, OnItemsSourceChanged)); + public IList ItemsSource + { + get + { + return (IList)GetValue(ItemsSourceProperty); + } + set + { + SetValue(ItemsSourceProperty, value); + } + } - private static void OnItemsSourceChanged( DependencyObject o, DependencyPropertyChangedEventArgs e ) - { - PrimitiveTypeCollectionControl primitiveTypeCollectionControl = o as PrimitiveTypeCollectionControl; - if( primitiveTypeCollectionControl != null ) - primitiveTypeCollectionControl.OnItemsSourceChanged( ( IList )e.OldValue, ( IList )e.NewValue ); - } + private static void OnItemsSourceChanged(DependencyObject o, DependencyPropertyChangedEventArgs e) + { + PrimitiveTypeCollectionControl primitiveTypeCollectionControl = o as PrimitiveTypeCollectionControl; + if (primitiveTypeCollectionControl != null) + primitiveTypeCollectionControl.OnItemsSourceChanged((IList)e.OldValue, (IList)e.NewValue); + } - protected virtual void OnItemsSourceChanged( IList oldValue, IList newValue ) - { - if( newValue == null ) - return; + protected virtual void OnItemsSourceChanged(IList oldValue, IList newValue) + { + if (newValue == null) + return; - if( ItemsSourceType == null ) - ItemsSourceType = newValue.GetType(); + if (ItemsSourceType == null) + ItemsSourceType = newValue.GetType(); - if( ItemType == null && newValue.GetType().ContainsGenericParameters ) - ItemType = newValue.GetType().GetGenericArguments()[ 0 ]; + if (ItemType == null && newValue.GetType().ContainsGenericParameters) + ItemType = newValue.GetType().GetGenericArguments()[0]; - SetText( newValue ); - } + SetText(newValue); + } - #endregion //ItemsSource + #endregion //ItemsSource - #region IsReadOnly + #region IsReadOnly - public static readonly DependencyProperty IsReadOnlyProperty = - DependencyProperty.Register( "IsReadOnly", typeof( bool ), typeof( PrimitiveTypeCollectionControl ), new UIPropertyMetadata( false ) ); + public static readonly DependencyProperty IsReadOnlyProperty = + DependencyProperty.Register("IsReadOnly", typeof(bool), typeof(PrimitiveTypeCollectionControl), new UIPropertyMetadata(false)); - public bool IsReadOnly - { - get - { - return ( bool )GetValue( IsReadOnlyProperty ); - } - set - { - SetValue( IsReadOnlyProperty, value ); - } - } + public bool IsReadOnly + { + get + { + return (bool)GetValue(IsReadOnlyProperty); + } + set + { + SetValue(IsReadOnlyProperty, value); + } + } - #endregion //IsReadOnly + #endregion //IsReadOnly - #region ItemsSourceType + #region ItemsSourceType - public static readonly DependencyProperty ItemsSourceTypeProperty = DependencyProperty.Register( "ItemsSourceType", typeof( Type ), typeof( PrimitiveTypeCollectionControl ), new UIPropertyMetadata( null ) ); - public Type ItemsSourceType - { - get - { - return ( Type )GetValue( ItemsSourceTypeProperty ); - } - set - { - SetValue( ItemsSourceTypeProperty, value ); - } - } + public static readonly DependencyProperty ItemsSourceTypeProperty = DependencyProperty.Register("ItemsSourceType", typeof(Type), typeof(PrimitiveTypeCollectionControl), new UIPropertyMetadata(null)); + public Type ItemsSourceType + { + get + { + return (Type)GetValue(ItemsSourceTypeProperty); + } + set + { + SetValue(ItemsSourceTypeProperty, value); + } + } - #endregion ItemsSourceType + #endregion ItemsSourceType - #region ItemType + #region ItemType - public static readonly DependencyProperty ItemTypeProperty = DependencyProperty.Register( "ItemType", typeof( Type ), typeof( PrimitiveTypeCollectionControl ), new UIPropertyMetadata( null ) ); - public Type ItemType - { - get - { - return ( Type )GetValue( ItemTypeProperty ); - } - set - { - SetValue( ItemTypeProperty, value ); - } - } + public static readonly DependencyProperty ItemTypeProperty = DependencyProperty.Register("ItemType", typeof(Type), typeof(PrimitiveTypeCollectionControl), new UIPropertyMetadata(null)); + public Type ItemType + { + get + { + return (Type)GetValue(ItemTypeProperty); + } + set + { + SetValue(ItemTypeProperty, value); + } + } - #endregion ItemType + #endregion ItemType - #region Text + #region Text - public static readonly DependencyProperty TextProperty = DependencyProperty.Register( "Text", typeof( string ), typeof( PrimitiveTypeCollectionControl ), new UIPropertyMetadata( null, OnTextChanged ) ); - public string Text - { - get - { - return ( string )GetValue( TextProperty ); - } - set - { - SetValue( TextProperty, value ); - } - } + public static readonly DependencyProperty TextProperty = DependencyProperty.Register("Text", typeof(string), typeof(PrimitiveTypeCollectionControl), new UIPropertyMetadata(null, OnTextChanged)); + public string Text + { + get + { + return (string)GetValue(TextProperty); + } + set + { + SetValue(TextProperty, value); + } + } - private static void OnTextChanged( DependencyObject o, DependencyPropertyChangedEventArgs e ) - { - PrimitiveTypeCollectionControl primitiveTypeCollectionControl = o as PrimitiveTypeCollectionControl; - if( primitiveTypeCollectionControl != null ) - primitiveTypeCollectionControl.OnTextChanged( ( string )e.OldValue, ( string )e.NewValue ); - } + private static void OnTextChanged(DependencyObject o, DependencyPropertyChangedEventArgs e) + { + PrimitiveTypeCollectionControl primitiveTypeCollectionControl = o as PrimitiveTypeCollectionControl; + if (primitiveTypeCollectionControl != null) + primitiveTypeCollectionControl.OnTextChanged((string)e.OldValue, (string)e.NewValue); + } - protected virtual void OnTextChanged( string oldValue, string newValue ) - { - if( !_surpressTextChanged ) - PersistChanges(); - } + protected virtual void OnTextChanged(string oldValue, string newValue) + { + if (!_surpressTextChanged) + PersistChanges(); + } - #endregion //Text + #endregion //Text - #endregion //Properties + #endregion //Properties - #region Constructors + #region Constructors - static PrimitiveTypeCollectionControl() - { - DefaultStyleKeyProperty.OverrideMetadata( typeof( PrimitiveTypeCollectionControl ), new FrameworkPropertyMetadata( typeof( PrimitiveTypeCollectionControl ) ) ); - } + static PrimitiveTypeCollectionControl() + { + DefaultStyleKeyProperty.OverrideMetadata(typeof(PrimitiveTypeCollectionControl), new FrameworkPropertyMetadata(typeof(PrimitiveTypeCollectionControl))); + } - public PrimitiveTypeCollectionControl() - { + public PrimitiveTypeCollectionControl() + { - Core.Message.ShowMessage(); - } + Core.Message.ShowMessage(); + } - #endregion //Constructors + #endregion //Constructors - #region Overrides + #region Overrides - #endregion + #endregion - #region Methods + #region Methods - private void PersistChanges() - { - IList list = ComputeItemsSource(); - if( list == null ) - return; + private void PersistChanges() + { + IList list = ComputeItemsSource(); + if (list == null) + return; - IList items = ComputeItems(); + IList items = ComputeItems(); - //the easiest way to persist changes to the source is to just clear the source list and then add all items to it. - list.Clear(); + //the easiest way to persist changes to the source is to just clear the source list and then add all items to it. + list.Clear(); - int counter = 0; - foreach( var item in items ) - { - if( list is Array ) - { - ( ( Array )list ).SetValue( item, counter++ ); + int counter = 0; + foreach (var item in items) + { + if (list is Array) + { + ((Array)list).SetValue(item, counter++); + } + else + { + list.Add(item); + } + } + + this.ItemsSource = list; + + // if something went wrong during conversion we want to reload the text to show only valid entries + if (_conversionFailed) + SetText(list); } - else + + private IList ComputeItems() { - list.Add( item ); - } - }; + IList items = new List(); - // if something went wrong during conversion we want to reload the text to show only valid entries - if( _conversionFailed ) - SetText( list ); - } + if (ItemType == null) + return items; - private IList ComputeItems() - { - IList items = new List(); + string[] textArray = Text.Split('\n'); - if( ItemType == null ) - return items; + foreach (string s in textArray) + { + string valueString = s.TrimEnd('\r'); + if (!String.IsNullOrEmpty(valueString)) + { + object value = null; + try + { + if (ItemType.IsEnum) + { + value = Enum.Parse(ItemType, valueString); + } + else + { + value = Convert.ChangeType(valueString, ItemType); + } + } + catch + { + //a conversion failed + _conversionFailed = true; + } + + if (value != null) + items.Add(value); + } + } - string[] textArray = Text.Split( '\n' ); + return items; + } - foreach( string s in textArray ) - { - string valueString = s.TrimEnd( '\r' ); - if( !String.IsNullOrEmpty( valueString ) ) + private IList ComputeItemsSource() { - object value = null; - try - { - if( ItemType.IsEnum ) - { - value = Enum.Parse( ItemType, valueString ); - } - else + if (ItemsSource == null) { - value = Convert.ChangeType( valueString, ItemType ); + // Save current text since creating the ItemsSource will reset it + string currentText = this.Text; + ItemsSource = CreateItemsSource(); + this.Text = currentText; } - } - catch - { - //a conversion failed - _conversionFailed = true; - } - - if( value != null ) - items.Add( value ); - } - } - return items; - } + return ItemsSource; + } - private IList ComputeItemsSource() - { - if( ItemsSource == null ) - { - // Save current text since creating the ItemsSource will reset it - string currentText = this.Text; - ItemsSource = CreateItemsSource(); - this.Text = currentText; - } - - return ItemsSource; - } + private IList CreateItemsSource() + { + IList list = null; - private IList CreateItemsSource() - { - IList list = null; + if (ItemsSourceType != null) + { + ConstructorInfo constructor = ItemsSourceType.GetConstructor(Type.EmptyTypes); + list = (IList)constructor.Invoke(null); + } - if( ItemsSourceType != null ) - { - ConstructorInfo constructor = ItemsSourceType.GetConstructor( Type.EmptyTypes ); - list = ( IList )constructor.Invoke( null ); - } + return list; + } - return list; - } + private void SetText(IEnumerable collection) + { + _surpressTextChanged = true; + StringBuilder builder = new StringBuilder(); + foreach (object obj2 in collection) + { + builder.Append(obj2.ToString()); + builder.AppendLine(); + } + Text = builder.ToString().Trim(); + _surpressTextChanged = false; + } - private void SetText( IEnumerable collection ) - { - _surpressTextChanged = true; - StringBuilder builder = new StringBuilder(); - foreach( object obj2 in collection ) - { - builder.Append( obj2.ToString() ); - builder.AppendLine(); - } - Text = builder.ToString().Trim(); - _surpressTextChanged = false; + #endregion //Methods } - - #endregion //Methods - } }