none
Exception для Bindings после перехода с 2.0 на 4.0 RRS feed

  • Вопрос

  • Добрый день.

    Я использую кастом класс для хранения настроек печати. Для изменения этих настроек пользователем есть некоторый UI. Соответсвенно выполняется биндинг нужных свойств класса к нужным контролам. После изменения target framework с 2.0 на 4.0 наблюдается ошибка:

     

     System.ArgumentException: Child list for field PhotoPosition cannot be created.

     

    Может кто-нибудь в курсе в чем проблема?

     

    Биндинг:

     

    nnudPhotoX.DataBindings.Add(new Binding("Value", ComponentSettings.Instance, "PrintingSettings.PhotoPosition.XAxis"));

    nnudPhotoY.DataBindings.Add(new Binding("Value", ComponentSettings.Instance, "PrintingSettings.PhotoPosition.YAxis"));

     

     

     

    Используемые классы:

     

    internal sealed class ComponentSettings : WorkspaceSettingsBase
    
        {
    
            private static ComponentSettings _instance = null;
    
    
    
            internal ComponentSettings()
    
                : base()
    
            {
    
            }
    
    
    
            public static DriverLicenseProductionComponentSettings Instance
    
            {
    
                get 
    
                {
    
                    if (_instance == null) _instance = new ComponentSettings();
    
                    return _instance; 
    
                }
    
                internal set
    
                {
    
                    _instance = value;
    
                }
    
            }
    
    
    
            [global::System.Configuration.ApplicationScopedSetting()]
    
            public CustomPrintingSettingsPrintingSettings
    
            {
    
                get
    
                {
    
                    return ((DriverLicensePrintingSettings)(this["PrintingSettings"]));
    
                }
    
                set
    
                {
    
                    this["PrintingSettings"] = value;
    
                }
    
            }
    
        }
    
    
    
    
    [Serializable]
    
        public class CustomPrintingSettings
    
        {
    
            #region Переменные
    
            private Metric _photoPosition;
    
            #endregion
    
    
    
            public CustomPrintingSettings()
    
            {
    
            }
    
    
    
            #region Свойства
    
            public Metric PhotoPosition
    
            {
    
                get { return _photoPosition; }
    
                set { _photoPosition = value; }
    
            }
    
            #endregion
    
    
    
            public override bool Equals(object obj)
    
            {
    
                if (!(obj is CustomPrintingSettings)) return false;
    
                PrintingSettings value = (CustomPrintingSettings)obj;
    
                bool retVal = true;
    
    
    
                foreach (PropertyInfo pi in this.GetType().GetProperties())
    
                    retVal &= pi.GetValue(this, null).Equals(pi.GetValue(value, null));
    
    
    
                return retVal;
    
            }
    
    
    
            public override int GetHashCode()
    
            {
    
                int retVal = int.MaxValue;
    
                foreach (PropertyInfo pi in this.GetType().GetProperties())
    
                    retVal ^= pi.GetValue(this, null).GetHashCode();
    
                return retVal;
    
            }
    
        }
    
    
    
    public class Metric : IXmlSerializable
    
        {
    
            private PointF _pt = new PointF(0, 0);
    
    
    
            public override bool Equals(object obj)
    
            {
    
                if (!(obj is Metric)) return false;
    
                Metric value = (Metric)obj;
    
                return this.XAxis.CompareTo(value.XAxis) == 0 && this.YAxis.CompareTo(value.YAxis) == 0;
    
            }
    
    
    
            public override int GetHashCode()
    
            {
    
                return _pt.GetHashCode();
    
            }
    
    
    
            public Metric()
    
            {
    
            }
    
    
    
            public float XAxis
    
            {
    
                get { return _pt.X; }
    
                set { _pt.X = value; }
    
            }
    
    
    
            public float YAxis
    
            {
    
                get { return _pt.Y; }
    
                set { _pt.Y = value; }
    
            }
    
    
    
            public PointF Point
    
            {
    
                get { return _pt; }
    
            }
    
    
    
            public SizeF Size
    
            {
    
                get { return new SizeF(_pt); }
    
            }
    
    
    
            #region IXmlSerializable Members
    
    
    
            public System.Xml.Schema.XmlSchema GetSchema()
    
            {
    
                return null;
    
            }
    
    
    
            public void ReadXml(System.Xml.XmlReader reader)
    
            {
    
                reader.Read();
    
                reader.Read();
    
    
    
                reader.ReadStartElement("XAxis");
    
                _pt.X = reader.ReadContentAsFloat();
    
                reader.ReadEndElement();
    
                reader.ReadStartElement("YAxis");
    
                _pt.Y = reader.ReadContentAsFloat();
    
                reader.ReadEndElement();
    
    
    
                reader.ReadEndElement();
    
                reader.ReadEndElement();
    
            }
    
    
    
            public void WriteXml(System.Xml.XmlWriter writer)
    
            {
    
                writer.WriteStartElement("Metric");
    
    
    
                writer.WriteStartElement("XAxis");
    
                writer.WriteValue(_pt.X);
    
                writer.WriteEndElement();
    
                writer.WriteStartElement("YAxis");
    
                writer.WriteValue(_pt.Y);
    
                writer.WriteEndElement();
    
    
    
                writer.WriteEndElement();
    
            }
    
    
    
            #endregion
    
        }
    

     

     

     

    29 апреля 2011 г. 13:42

Ответы

  • Где-то я слыхал про проблему с биндингом при миграции на 4ый фреймворк, когда есть в значениях точка - бингдинг криво отрабатывает на 4ом.

    Может Вам имеет смысл заменить хранение значений настроек на "безопасные" варианты.

    Don't forget to vote for useful replies and/or mark answers for your questions - that helps other guys to find the answer faster.
    • Помечено в качестве ответа Abolmasov Dmitry 4 мая 2011 г. 11:14

Все ответы

  • Нигде ничего не биндится по имени, в котором есть точка - '.'?
    Don't forget to vote for useful replies and/or mark answers for your questions - that helps other guys to find the answer faster.
    30 апреля 2011 г. 20:44
  • Ну вобщем-то да.

    Т.е. если выполнить биндинг 

    nnudPhotoX.DataBindings.Add(new Binding("Value", ComponentSettings.Instance.PrintingSettings.PhotoPosition, "XAxis"));

    то все прекрасно и на 2-ом и на 4-ом фреймворке.

  • Где-то я слыхал про проблему с биндингом при миграции на 4ый фреймворк, когда есть в значениях точка - бингдинг криво отрабатывает на 4ом.

    Может Вам имеет смысл заменить хранение значений настроек на "безопасные" варианты.

    Don't forget to vote for useful replies and/or mark answers for your questions - that helps other guys to find the answer faster.
    • Помечено в качестве ответа Abolmasov Dmitry 4 мая 2011 г. 11:14