Monotouch.Dialog Создать из БД и сохранить значения

У меня есть представление настроек, в котором я использую MT.D для создания своего пользовательского интерфейса. Я просто получил его для чтения элементов из базы данных, чтобы заполнить элементы в разделе.

Чего я не знаю, как сделать, так это получить доступ к свойствам или значениям каждого элемента. Я хочу стилизовать элемент с другим цветом фона для каждого элемента в зависимости от его значения в базе данных. Я также хочу иметь возможность получить выбранное значение, чтобы обновить его в базе данных. Вот рендеринг кода, который делает пользовательский интерфейс с MT.D. Я могу заставить значения отображаться и выскальзывать, как и предполагалось... но, стилизуя или добавляя к ним делегатов для обработки кликов, я теряюсь.

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")
                }

person BRogers    schedule 14.02.2013    source источник
comment
Я понял это довольно элегантным способом. Мне это нравится больше, чем пример Advanced Editing в MT.D Framework.   -  person BRogers    schedule 15.02.2013


Ответы (1)


Вот как я справился с этим ниже. По сути, вам нужно создать элемент в цикле foreach, а затем заполнить делегат тем, что вы хотите там сделать. Вот так:

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;
        }
person BRogers    schedule 08.03.2013
comment
Нет реальной необходимости в том, чтобы это было статичным. просто не хотел создавать экземпляр во время тестирования. - person BRogers; 08.03.2013