2011-02-03 14 views
5

Quiero vincular una ObservableCollection a una contrición Pivot en WP7 para que cada objeto en mi ObservableCollection se convierta en un PivotItem. Este es el código que utilizo:PivotItems de unión de datos a ObservableCollection en WP7

<controls:Pivot x:Name="MainPivot" ItemsSource="{Binding Persons}"> 
     <controls:Pivot.HeaderTemplate> 
      <DataTemplate> 
       <TextBlock Text="{Binding FullName}"/> 
      </DataTemplate> 
     </controls:Pivot.HeaderTemplate> 
     <controls:Pivot.ItemTemplate> 
      <DataTemplate> 
       <StackPanel Margin="0,0,0,17" Width="432"> 
        <TextBlock Text="{Binding FirstName}"/> 
        <TextBlock Text="{Binding LastName}"/> 
        <TextBlock Text="{Binding HomeTown}"/> 
       </StackPanel> 
      </DataTemplate> 
     </controls:Pivot.ItemTemplate> 
    </controls:Pivot> 

Esto funciona con los objetos y en tre mi ObservableCollection consigo tres PivotItems. Pero cuando todo se carga, el enlace dentro de DataTemplate no se actualizará. Solo cuando me desplazo al siguiente PivotItem, se cargan FirstName, LastName y HomeTown.

¿Por qué es eso? ¿Qué me estoy perdiendo?

Gracias

Respuesta

0

Después de hacer una prueba sencilla que no puedo reproducir este comportamiento. Puse un punto de interrupción dentro del bloque get del equivalente de FirstName con dos elementos en mi ObservableCollection obtengo dos hits.

¿Cómo detectó que no está unido? No puede ver el contenido de los siguientes "pivotitems", ¿cómo?

+0

Hola Jonas. Son las propiedades del "primer" pivotitem que no puedo ver. Cuando me deslizo hacia el "próximo" que aparece, también lo hace el "primero" cuando me deslizo hacia atrás. –

+0

¿Cuándo instansiate the ObservableCollection y cuándo agrega elementos en él? Creo mi prueba y agregué los elementos en el constructor ANTES de configurar el DataContext –

+0

Pero después de probar para establecer el DataContext en el evento Loaded aún funciona para mí aunque –

0

Parece que hay un problema con la orden de carga, o con el código de notificación.

Compruebe que está activando correctamente el evento PropertyChanged cuando establece las propiedades en cada uno de sus miembros FirstName, LastName y HomeTown.

1

Yo tenía el mismo problema, pero la solución con la configuración SelectedIndex = 1 no me conviene.

Encontré la otra solución: cuando agrega el artículo a su colección Personas, primero debe crear un elemento temporal y solo cuando complete todos los datos, agréguelo a su colección Personas.

Person tempPers = new Person() { FullName = "Abduvaliev Edem", FirstName = "Edem", LastName = "Abduvaliev", HomeTown = "Sevastopol"}; 
Pesrons.Add(tempPers); 
0

Así es como lo hago. El problema para mí es que la colección se actualiza de forma asíncrona en respuesta a una llamada a un método web.

void Page_Loaded(object sender, RoutedEventArgs e) 
{ 
    _log.Debug("Page loaded."); 

    var vm = this.GetViewModel<TrendsViewModel>(); 

    if (!vm.IsInitialized) 
    { 
     vm.PivotItems.CollectionChanged += (origin, args) => 
     { 
      this.PivotControl.DataContext = null; 
      this.PivotControl.DataContext = vm; 
     }; 

     vm.Initialize(this); 
    } 
} 

La clave es conectar un observador de la colección a la que los elementos de pivote están unidos y dando el contexto de datos una sacudida cuando se actualiza.

Cuestiones relacionadas