2012-03-05 4 views
3

Для приложения, которое динамически изменяет, какие входы отображаются на экране, я создаю все возможное Elements, а затем создаю Section, который содержит те, которые мне нужны, с учетом текущих данных.Reuse MonoTouch.Dialog Element

Например, если пользователь взаимодействует с , форма должна быть обновлена, а поля показаны соответственно.

Видимо эта модель не работает, как показано на этом тесте:

 var dateEntry = new DateTimeElement("Timestamp", DateTime.Now); 

     var section = new Section() { dateEntry }; 
     var root = new RootElement("Root") { section }; 
     var dvc = new DialogViewController(root); 

     window.RootViewController = dvc; 

     NSTimer.CreateScheduledTimer (TimeSpan.FromSeconds (2), delegate { 
      var newSection = new Section() { dateEntry }; 
      dvc.Root.Clear(); 
      dvc.Root.Add(newSection); 
     }); 

Приведенный выше код бросает в DateTimeElement.FormatDate в NullReferenceException когда таймер вверх.

Я также пробовал воссоздать не только Section, но и RootElement, но безрезультатно.

Есть ли рекомендованный шаблон для повторного использования Elements, или я должен просто создавать новые входы при каждом изменении данных?

ответ

3

это должно сделать трюк для вас, и вы можете удалить NSTimer

 this.Root.Remove(section); 
     this.Root.Insert(0,UITableViewRowAnimation.Fade,newSection); 
+0

NSTimer только там, чтобы имитировать реальное использование в мире, в этом случае пользователь нажимает на кнопку несколько секунд после того, как появится экран , Я попробую ваше решение и посмотрю, работает ли оно. – Timm

+0

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

+0

Может показывать код? – Janub