سؤال

لديّ تحكم مخصص يحتوي على Items منشأه. لقد طبقت EditorAttribute مع UITypeEditor من النوع CollectionEditor.

نوع المجموعة:

[Serializable]
[Editor(typeof(CollectionEditor), typeof(UITypeEditor))]
public class ListItemsCollection : CollectionBase
{
    // methods
}

إعلان الممتلكات في السيطرة:

private new ListItemsCollection _Items;

[Editor(typeof(CollectionEditor), typeof(UITypeEditor))]
public new ListItemsCollection Items
{
    get
    {
        return _Items;
    }
    set
    {
        _Items = value;

        // do other UI changes
    }
}

مشكلة:
عندما أسقط عنصر التحكم هذا على سطح المصمم ، أتمكن من إضافة عناصر إلى خاصية العناصر باستخدام PropertyGrid. لكن عندما انقر فوق Ok زر CollectionEditor ضابط Items لا يتم استدعاء الممتلكات.

AFAIK عند إرجاع قيمة من EditValue طريقة أ UITypeEditor الفئة من المفترض أن يتم استدعاء كتلة setter من العقار.

هذا يقودني الى الجنون. حتى أنني حاولت إضافة Eventإلى ListItemsCollection, ، حتى أنه عند إضافة العناصر ، يمكنني أن يمكنني كل ما أريد مع واجهة المستخدم الخاصة بالسيطرة.

هذا ليس من المفترض أن يكون صعبًا. ما الخطأ الذي افعله؟

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

المحلول

أحاول إعادة تنظيم موقفك: باستخدام الكود التالي ، أحصل على مربع رسالة يظهر متى أقوم بتحرير القائمة من نافذة VS Property. احذر منك إنشاء القائمة بنفسك. إذا لم تنشئها ، فالإنشاء قائمة مؤقتة يمكنك تحريرها من نافذة الخاصية ، ولكنها لا تقوم بتعيين خاصتك على هذه القائمة (لذلك لن يتم استدعاء Setter الخاص بك أبدًا)

    public UserControl1()
    {
        InitializeComponent();
        list = new BindingList<ListViewItem>();
        list.ListChanged += new ListChangedEventHandler(list_ListChanged);
    }

    void list_ListChanged(object sender, ListChangedEventArgs e)
    {
        MessageBox.Show(e.ListChangedType.ToString());
    }

    private BindingList<ListViewItem> list;

    public BindingList<ListViewItem> List1
    {
        get { return list; }
    }

نصائح أخرى

يجب أن تكون خصائص جمع القراءة فقط. إنها المجموعة التي يتم استردادها من خلال getter ، وتعديلها. لا يدخل Setter في ذلك ، لأن ذلك يعني تحديد مجموعة جديدة.

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