Frage

habe ich ein benutzerdefiniertes Steuerelement, das eine Items Eigenschaft hat. Ich habe eine EditorAttribute mit einem UITypeEditor vom Typ CollectionEditor angewandt.

Sammlung Typ:

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

Property Deklaration in der Steuer:

private new ListItemsCollection _Items;

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

        // do other UI changes
    }
}

Problem:
Als ich diese Kontrolle auf die Designer-Oberfläche fallen, bin ich in der Lage, Elemente in die Eigenschaft Items hinzufügen, um die PropertyGrid verwenden. Aber, das wenn ich auf die Ok Taste des CollectionEditor der Setter der Items Eigenschaft wird nicht genannt zu werden.

AFAIK, wenn ein Wert aus der EditValue Methode eines UITypeEditor Klasse der Setzer Block der Eigenschaft zurückgegeben wird, soll genannt werden.

Das treibt mich in den Wahnsinn. Ich habe sogar versucht Event die zum ListItemsCollection Zugabe so, dass, wenn Artikel hinzugefügt werden, kann ich alles, was ich mit der ui Kontrolle will.

Das soll nicht schwer sein. Was mache ich falsch?

War es hilfreich?

Lösung

Ich versuche, um Ihre Situation zu reprodeuce: folgenden Code verwenden, erhalte ich ein Meldungsfeld zeigt, wenn ich die Liste von VS Eigenschaftsfenster bearbeiten. Beachten Sie, dass Sie die Liste selbst erstellen müssen. Wenn Sie es nicht schaffen, schaffen VS eine temporäre Liste, die Sie von Eigenschaftsfenster bearbeiten können, aber nicht Ihr Eigentum auf diese Liste gesetzt (so Ihre Setter wird nie genannt werden)

    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; }
    }

Andere Tipps

Sammlung Eigenschaften sollten nur gelesen werden. Es ist die Sammlung, die durch den Getter abgerufen wird, und eingestellt. Der Setter nie tritt in sie, denn das würde bedeuten, eine neue Kollektion zu setzen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top