يمكن جعل الافتراضي جمع محرر و/أو مخصص UIEditor envoke مجموعة accessor على العقار ؟

StackOverflow https://stackoverflow.com/questions/1209452

سؤال

أنا أكتب المكونات في التطبيق حيث لدي فئة مخصصة سمات الأم الكائنات من البرنامج.API يسمح لي القراءة والكتابة مرتبطا السلاسل مباشرة من الكائنات الموجودة في الملف الأصلي.لذا بدلا من القراءة والكتابة إلى حقول خاصة في الحصول على وتعيين accessors من كل الممتلكات أنا القراءة والكتابة المستخدم هذه السلاسل من مواليد الكائنات في البرنامج.

المستخدم بالوصول إلى هذه الخصائص من خلال PropertyGrid التحكم.حتى الآن هذا كل شيء يعمل على ما يرام مع بسيطة الخصائص إلا الآن أنا بحاجة إلى تخزين مجموعة مخصصة (FloorCollection) من مخصص نوع الكائن (الكلمة).

حتى لقد إعداد خاصية استخدام XmlSerializer.الحصول على accessor يقرأ المستخدم سلسلة من مواليد كائنات ثم السلسلة يتم إلغاء تسلسل في مثيل FloorCollection.مجموعة accessor يفعل عكس ذلك من خلال قراءة في مثيل FloorCollection, و التسلسلية إلى المستخدم السلسلة.

هذا ما عندي من الممتلكات تبدو مثل:

public FloorCollection Floors
{
    get 
    {
        string oldString = this.GetBaseObjUserString("CPFloors");
        if (oldString == null) return null;

        XmlSerializer serializer = new XmlSerializer(typeof(FloorCollection));
        StringReader strReader = new StringReader(oldString);

        FloorCollection newCollection =                 
        (FloorCollection)serializer.Deserialize(strReader);
        return newCollection;
    }

    set 
    {
        FloorCollection newCol = value;

        if (newCol == null) return;

        //serializes new collection
        XmlSerializer serializer = new XmlSerializer(typeof(FloorCollection));
        StringWriter sw = new StringWriter();

        serializer.Serialize(sw, newCol);

        string newString = sw.ToString();

        this.SetBaseObjUserString("CPFloors", newString);
    }
}

لا يمكن فتح هذه المجموعة الملكية من خلال بلدي PropertGrid في جمع الافتراضي محرر.ومع ذلك ، فإن جمع الافتراضي محرر فقط التعديلات جمع في المرجعية المقدمة من الحصول على accessor ، بدلا من استدعاء مجموعة accessor إلى حفظه مرة أخرى إلى الكائن.لذا يمكن تحرير جمع في المحرر الافتراضي ، ولكن عند إغلاق ثم إعادة فتح محرر جمع لا تغيرت بسبب أسلوب استرجاع القيمة تعيين يسمى أبدا إلى تسلسل جمع إلى المستخدم في سلسلة الأصلي الكائن.

هل يمكنني تعديل الافتراضي جمع محرر استدعاء مجموعة استرجاع قيمة العقار ؟ إن الإعداد مخصص UITypeEditor الخاصية هل هناك طريقة قد حفظ مرة أخرى إلى مكان الإقامة باستخدام خاصية استرجاع قيمة?أو هل هناك طريقة أخرى أن القوة البرمجية التي يتم الوصول إلى مجموعة المنشأة للحصول على تعيين الخاصية قيمة بدلا من مرجع ؟

هل كانت مفيدة؟

المحلول

أنا لا أصدق مسلسل XML من أي وقت مضى وسوف نتصل set accessor على مجموعة.بدلا من ذلك أنها سوف مجرد دعوة طريقة إضافة مجموعة سبيل المثال فإنه يسترد من get accessor.

أعتقد أنك سوف تحتاج إلى جمع الخاصة بك نوع تجاوز إضافة وإزالة أساليب مثل تعديل جمع ، ثم تسلسل المعدل جمع مرة أخرى إلى المستخدم الملكية.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top