0

我有一个已经有 DataContext 的页面。

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

如何做到这一点?

这是显示第一个数据透视项信息的第一个 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;
            }

        }
    }
4

1 回答 1

0

你应该有一个 ViewModel 来保存你想要绑定的所有数据。将此 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 以绑定到这些项目的属性,而不是 {Binding}

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

于 2012-06-17T05:03:41.457 回答