2012-06-17 86 views
0

我有一个已经拥有DataContext的页面。在同一页上的两个集合

当我更改数据透视表项时,我需要将另一个列表绑定到另一个集合。

如何实现这一目标?

这是显示第一个pivotitem信息的第一个DataContext。

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

然后我尝试到第二集中加载到列表框中,但不工作:

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

     } 
    } 

回答

0

你应该有一个视图模型来保存所有的数据,你要绑定。将此ViewModel设置为您的数据上下文。

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

在您的OnNavigatedTo方法设置这两个属性和设置的DataContext是这个对象。您需要更改xaml来绑定这些项目的属性,而不是{绑定}

您可以提前设置PivotItem将要绑定的集合,而不必担心呈现延迟。 PivotItems延迟渲染直至显示出来。

相关问题