2012-02-26 21 views
3

在應用程序中我建立我用下面的模式後:如果用戶點擊一個分層導航元素我馬上打開下一個UIViewController,大約需要裝載護理其數據本身,並顯示加載微調,如果它正在通過網絡。怪異塊時元素MonoTouch的對話框rootElement的它顯示

現在大多數列表視圖使用MonoTouch創建。在一個DialogViewController我有一個問題,在屏幕已經顯示後向視圖RootElement添加許多元素。

起初StringElements出現在屏幕上很好,但如果你上下對每行文字快速滾動成爲一個塊:

screenshot of the issue at hand

代碼來重現問題:

 var root = new RootElement("Root"); 
     var dvc = new DialogViewController(root) { AutoHideSearch = true, EnableSearch = true }; 

     nav.PushViewController(dvc, true); 

     Task.Factory.StartNew(() => { 
       Thread.Sleep(TimeSpan.FromSeconds(1)); 
      UIApplication.SharedApplication.InvokeOnMainThread(() => { 
       var sec = new Section(); 

       for (int i = 0; i < 100; i++) 
       { 
        var el = new StyledStringElement("Test", "Test", UITableViewCellStyle.Value1); 
        sec.Add(el); 
       } 

       root.Add(sec); 
      }); 
     }); 

有趣的是,只有左邊的字符串看起來像一個塊,而右邊的字符串很好。在附註中,在他們的MWC(演示)應用程序中,Xamarin created a new RootElement to repopulate the twitter list as well

回答

3

似乎沒有被稱爲主線程上的數據源的重新加載正確呈現新的價值觀:

var dvc = new DialogViewController(new RootElement("")); 
_root = new UINavigationController(); 
_root.PushViewController(dvc, true); 
_window.RootViewController = _root; 

Task.Factory.StartNew(() => { 
    Thread.Sleep(TimeSpan.FromSeconds(1)); 
    var section = new Section(""); 
     foreach (var i in Enumerable.Range(1, 100)) { 
      section.Add(new StyledStringElement(i.ToString(), "cell", UITableViewCellStyle.Value1)); 
     } 

    dvc.Root.Add(section); 
    BeginInvokeOnMainThread(() => { 
     dvc.ReloadData(); 
    }); 
}); 
+0

但是怎麼來的工作在第一和滾動關閉並再次啓動後休息? – Timm 2012-02-26 21:20:50

+0

對不起,我最初的假設似乎錯了。我正在調整答案。 – Anuj 2012-02-26 21:42:59

+0

添加'dvc.ReloadData();'確實修復了這個問題。但是從我有限的理解來看,這是我應該提交的一個錯誤。請在這個問題上投票,因爲您發現它值得回答;-)我會等待「接受」,直到我從錯誤報告中收到回覆。 – Timm 2012-02-27 13:30:37

0

我到底有沒有同樣的問題,當我渲染動態的元素一個BeginInvokeOnMainThread語句 如果我在構造函數中加載我的元素,UI將被阻止,但元素將很好地呈現。

,並感謝小費dvc.ReloadData將工作很適合我

相關問題