Datenquellen

Erstellen einer einfachen Datenquelle ohne UI

Die folgenden Erklärungen beziehen sich auf ein Beispiel, dass hier heruntergeladen werden kann.

Klassen, die von CustomListBase erben, repräsentieren eine Datenquelle. Im Folgenden werden die einzelnen, zu überschreibenden Funktionen erklärt:

GetDefinitionOverride liefert die Metadaten für die Datenquelle.
        protected override CustomListDefinition GetDefinitionOverride()
        {
            return new CustomListDefinition
            {
                ID = $"CatFactsCustomList",
                Name = "Cat Facts",
                Description = "Random cute stuff about cats", 
                PropertyInputPossible = true,
                PropertyInputDefaults = {
                    new CustomListPropertyDefinition(){ Name = "MaxLength", Value = "140"}
                }
            };
        }

Dabei sind insbesondere die Properties wichtig. Die Collection an Properties repräsentiert die Einstellungen, die der Enduser später in der UI des Designers vornehmen kann. Der Code von oben sieht später in der UI wie folgt aus: img01

Folgende Attribute kann eine Property haben:

        protected override void CheckDataOverride(CustomListData data)
        {
            if (!data.Properties.TryGetValue("MaxLength", StringComparison.OrdinalIgnoreCase, out var MaxLength))
            {
                throw new InvalidOperationException("The property MaxLength is not defined");
            }
        }

GetColumnsOverride wird gerufen, wenn der Designer Metadaten benötigt, um in der Visualisierung oder der UI auf die Spalten zu reagieren.

        protected override CustomListColumnCollection GetColumnsOverride(CustomListData data)
        {
            return new CustomListColumnCollection
            {
                new CustomListColumn("Fact", CustomListColumnTypes.String),
                new CustomListColumn("Length", CustomListColumnTypes.Number),
            };
        }

GetItemsOverride wird aufgerufen, wenn der tatsächliche Datenaustausch stattfinden soll. Wie im folgenden Beispiel wird eine Collection aus CustomListObjectElement zurückgegeben. Jedes CustomListObjectElement besteht aus den Spaltennamen und den tatsächlichen Werten.

        protected override CustomListObjectElementCollection GetItemsOverride(CustomListData data)
        {
            Int32 maxLength = CheckAndGetMaxLengthProperty(data);
            CatFact myfact = GetRandomCatfact(maxLength).Result;
            var items = new CustomListObjectElementCollection();
            items.Add(new CustomListObjectElement { { "Fact", myfact.fact }, { "Length", myfact.length }, });
            return items;
        }