2011-10-05 36 views
1

我在Panorama中有一個Panorama控件和ListBox控件。是否有任何「事件」,我可以掛鉤或以任何方式檢測與Panorama和/或ListBox控件關聯的所有數據綁定或UI顯示何時完成?如何檢測數據綁定到UI元素(全景和列表框)已在Windows Phone 7中完成?

我需要檢測此事件的原因是因爲我只想在Panorama和/或ListBox控件完全綁定並完成呈現後才顯示ApplicationBar。

例如,我的XAML定義如下。

<controls:Panorama Name="panorama"> 
<controls:Panorama.ItemTemplate> 
    <DataTemplate> 
    <ListBox ItemsSource="{Binding Details}"> 
    <ListBox.ItemTemplate> 
    <DataTemplate> 
     <TextBlock Text="{Binding Field1}"/> 
     <TextBlock Text="{Binding Field2}"/> 
     ... 
     <TextBlock Text="{Binding FieldN}"/> 
    </DataTemplate> 
    </ListBox.ItemTemplate> 
    </ListBox> 
    </DataTemplate> 
</controls:Panorama.ItemTemplate> 
</controls:Panorama> 

我的普通CLR對象(PO​​CO)看起來像下面這樣。

public class MyPoco { 
List<Detail> Details { get; set; } 
} 
public class Detail { 
public string Field1 { get; set; } 
public string Field1 { get; set; } 
... 
public string FieldN { get; set; } 
} 

在我的c#代碼隱藏,我綁定數據如下。

List<MyPoco> pocos = GetMyPocosFromSomewhere(); 
panorama.ItemsSource = myList; 
ApplicationBar.IsVisible = true; //i only want to make this visible after the Panorama and ListBox controls have finished binding and rendering 

現在,該代碼我已經勾勒出了上述工作,但應用程序任務欄總是可見的全景/列表框控件已呈現之前。對我來說,這會讓用戶體驗變得尷尬。

任何幫助表示讚賞。

回答

4

簡短的答案是「不,你無法檢測到」。

但是,一個好的解決方案是將命令添加到UI工作隊列中。調度員。就像這樣:

Dispatcher.BeginInvoke(() => ApplicationBar.IsVisible = true); 

這樣的話,它會先使其,當所有其他UI任務都做了,而且經驗不應該如此尷尬。

+0

謝謝。這確實有助於緩解症狀。 –

+0

只是爲了記錄,這用於UI的任何*更改。直接在UI線程上進行定期更改將被強制通過,其中BeginInvoke將在隊列中排隊。 –

相關問題