Monotouch.Dialog Generate from db and retain value

2019-05-25 23:51发布

问题:

I'm have a settings view where I'm using MT.D to build out my UI. I just got it to read elements from a database to populate the elements in a section.

What I don't know how to do is access each elements properties or values. I want to style the element with a different background color for each item based on it's value in the database. I also want to be able to get the selected value so that I can update it in the db. Here's the rendering of the code that does the UI stuff with MT.D. I can get the values to show up and slide out like their supposed to... but, styling or adding delegates to them to handle clicks I'm lost.

List<StyledStringElement> clientTypes = SettingsController.GetClientTypes ();

        public SettingsiPhoneView () : base (new RootElement("Home"), true)
        {
            Root = new RootElement("Settings") {
                new Section ("Types") {
                    new RootElement ("Types") {
                        new Section ("Client Types") {
                             from ct in clientTypes
                                select (Element) ct
                        }
                    },
                    new StringElement ("Other Types")
                }

回答1:

Here's how I handled it below. Basically you have to create the element in a foreach loop and then populate the delegate with whatever you want to do there. Like so:

public static List<StyledStringElement> GetClientTypesAsElement ()
        {
            List<ClientType> clientTypes = new List<ClientType> ();
            List<StyledStringElement> ctStringElements = new List<StyledStringElement> ();

            using (var db = new SQLite.SQLiteConnection(Database.db)) {
                var query = db.Table<ClientType> ().Where (ct => ct.IsActive == true && ct.Description != "Default");

                foreach (ClientType ct in query)
                    clientTypes.Add (ct);
            }

            foreach (ClientType ct in clientTypes) {
                // Build RGB values from the hex stored in the db (Hex example : #0E40BF)
                UIColor bgColor = UIColor.Clear.FromHexString(ct.Color, 1.0f);
                var localRef = ct;
                StyledStringElement element = new StyledStringElement(ct.Type, delegate {
                    ClientTypeView.EditClientTypeView(localRef.Type, localRef.ClientTypeId);
                });

                element.BackgroundColor = bgColor;
                ctStringElements.Add (element);
            }

            return ctStringElements;
        }