同一页面上的两个集合

时间:2012-06-17 01:39:30

标签: c# .net windows-phone-7

我有一个已经有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;
            }

        }
    }

1 个答案:

答案 0 :(得分:0)

您应该有一个ViewModel来保存要绑定的所有数据。将此ViewModel设置为您的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));
        }
    }
}

在OnNavigatedTo方法中设置两个属性并将DataContext设置为此对象。您需要将xaml更改为绑定到这些项的属性而不是{Binding}

您可以提前设置PivotItem将绑定的集合,而无需担心渲染延迟。 PivotItems会延迟渲染,直到显示它们。