MonoTouch.Dialog — Как получить значения из пользовательского интерфейса элемента

#ios #xamarin.ios #monotouch.dialog

#iOS #xamarin.ios #monotouch.dialog

Вопрос:

Я RootElement объявил и настроил, как я хочу, на DialogViewController , используя element-based API вместо reflection API . Выглядит великолепно.

Однако я изо всех сил пытаюсь понять, как я могу получить значения. Используя API на основе отражения, это легко, но я не вижу, как я могу использовать BindingContext.Fetch() с явно объявленным RootElement .

Я не могу найти пример в примерах, и я не могу понять, как это сделать сам.

 var root = new RootElement(null){
    new Section(){
        new StringElement("Title here"),
        new FloatElement(null, null, 5f)
    }
};

var dv = new DialogViewController(root, true);

dv.ViewDisappearing  = delegate {
    // what goes here to get at the value of the FloatElement?
};

NavigationController.PushViewController(dv, true);
  

Любая помощь приветствуется.

Комментарии:

1. Разве вы не могли бы просто обойти свой root, чтобы найти нужный элемент, а затем использовать его свойство Value для получения значения?

2. Это то, что я подумал. Но нет способа однозначно отличить один элемент FloatElement от другого. Итак, я решил это, добавив свойство Key к элементу, позволяющее коду обхода однозначно идентифицировать конкретный элемент.

Ответ №1:

Вы можете сохранить это в переменной, которая ограничена областью, в которой ваш анонимный метод может получить к ней доступ.

Вот так:

 var floatElement = new FloatElement(null, null, 5f);
var root = new RootElement(null){
    new Section(){
        new StringElement("Title here"),
        floatElement,
    }
};

var dv = new DialogViewController(root, true);

dv.ViewDisappearing  = delegate {
    //You can access floatElement here
    Console.WriteLine(floatElement.Value);
};

NavigationController.PushViewController(dv, true);
  

Комментарии:

1. Хороший способ справиться с этим, хотя вы частично теряете приятный стиль инициализатора C # 3.0. Отмечен как ответ, потому что это работает, даже если это не то, что я в конечном итоге делал. (Смотрите Мой комментарий к другому ответу)

2. Imo лучшее решение. В качестве альтернативы, сохранить все элементы в списке и отслеживать индексы? Просто предложение, если вам нужно обработать много элементов.