私はパノラマ内にパノラマコントロールとリストボックスコントロールを持っています。パノラマやリストボックスコントロールに関連付けられたすべてのデータバインディングや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は常に表示されます。私には、これはユーザーの扱いが厄介なものになります。
ご了承ください。
ありがとうございます。本当に症状を緩和するのに役立った。 –
ちょうど記録のために、これは*すべての* UIの変更になります。 UIスレッド上で直接定期的に変更が行われ、BeginInvokeがキューに入れられます。 –