2011-10-05 8 views
1

私はパノラマ内にパノラマコントロールとリストボックスコントロールを持っています。パノラマやリストボックスコントロールに関連付けられたすべてのデータバインディングやUI表示が終了したときに、私がフックしたり、何らかの方法で検出することができる「イベント」がありますか?UIエレメント(パノラマとリストボックス)へのデータバインディングがWindows Phone 7で完了したときを検出する方法は?

このイベントを検出する必要がある理由は、パノラマおよび/またはリストボックスコントロールが完全にバインドされてレンダリングを完了した後にのみ、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オブジェクト(POCO)は次のようになります。

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; } 
} 

私のコードビハインドでは、次のようにデータをバインドします。

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 

は今、コードは、私は上記の作品をスケッチしたように、しかし、パノラマ/のListBoxコントロールがレンダリングされる前にApplicationBarは常に表示されます。私には、これはユーザーの扱いが厄介なものになります。

ご了承ください。

答えて

4

短い答えは「いいえ、あなたはそれを検出できません」です。

ただし、コマンドをUI作業キューに追加することをお勧めします。ディスパッチャ。

このように、他のすべてのUIタスクが完了したら、まずそれをレンダリングして、その経験をとても厄介ではないはずです。

+0

ありがとうございます。本当に症状を緩和するのに役立った。 –

+0

ちょうど記録のために、これは*すべての* UIの変更になります。 UIスレッド上で直接定期的に変更が行われ、BeginInvokeがキューに入れられます。 –

関連する問題