2012-06-17 2 views
0

J'ai une page qui a déjà un DataContext.Deux collections sur la même page

Lorsque je modifie l'élément pivot, j'ai besoin de lier une autre liste à une autre collection.

Comment y parvenir?

Voici le premier DataContext qui montre les premières informations de pivot.

protected override void OnNavigatedTo(NavigationEventArgs e) 
    { 
     base.OnNavigatedTo(e); 

     if (NavigationContext.QueryString.TryGetValue("id", out _embarqueId)) 
     { 
      String json = JsonConvert.SerializeObject(_embarqueId); 

      using (IntrepService service = new IntrepService()) 
      { 
       String retornojson = service.ObterDetalhesEmbarque(json); 

       EmbarqueAtual = JsonConvert.DeserializeObject<EmbarqueViewModel>(retornojson); 

       DataContext = EmbarqueAtual; 
      } 

      VerificaConclusao(); 
     } 
    } 

Ensuite, je tente de charger la deuxième collection à la zone de liste, mais ne fonctionne pas:

private void Pivot_SelectionChanged(object sender, SelectionChangedEventArgs e) 
    { 
     if (!_itemsareloaded && ((PivotItem)pivot.SelectedItem).Header.Equals("itens")) 
     { 
      using (IntrepService service = new IntrepService()) 
      { 
       String json = JsonConvert.SerializeObject(_embarqueId); 

       var retorno = service.ObterItensEmbarque(json); 

       ItensDoEmbarque = JsonConvert.DeserializeObject<ObservableCollection<ItemDeEmbarqueViewModel>>(retorno); 
       lstItens.DataContext = ItensDoEmbarque; 
      } 

     } 
    } 

Répondre

0

Vous devriez avoir un ViewModel de tenir toutes vos données que vous souhaitez lier. Définissez ce ViewModel comme votre datacontext.

public class ViewModel : INotifyPropertyChanged 
{ 
    private ObservableCollection<ItemDeEmbarqueViewModel> _itensDoEmbarque; 
    private EmbarqueViewModel _embarqueAtual; 

    public ViewModel() 
    { 
     ItensDoEmbarque = new ObservableCollection<ItemDeEmbarqueViewModel>(); 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 

    public ObservableCollection<ItemDeEmbarqueViewModel> ItensDoEmbarque 
    { 
     get { return _itensDoEmbarque; } 
     set 
     { 
      _itensDoEmbarque= value; 
      OnPropertyChanged("ItensDoEmbarque"); 
     } 
    } 

    public EmbarqueViewModel EmbarqueAtual 
    { 
     get { return _embarqueAtual; } 
     set 
     { 
      _embarqueAtual = value; 
      OnPropertyChanged("EmbarqueAtual"); 
     } 
    } 

    protected virtual void OnPropertyChanged(string propertyName) 
    { 
     var handler = PropertyChanged; 
     if (handler != null) 
     { 
      handler(this, new PropertyChangedEventArgs(propertyName)); 
     } 
    } 
} 

Au sein de votre méthode de OnNavigatedTo définir à la fois des propriétés et définissez le DataContext être cet objet. Vous devrez modifier xaml pour lier aux propriétés de ces éléments au lieu de {Liaison}

Vous pouvez définir les collections que le PivotItem sera lié à l'avance sans vous soucier du délai de rendu. Les PivotItems retardent le rendu jusqu'à ce qu'ils soient affichés.

Questions connexes