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

次に、2 番目のコレクションをリストボックスにロードしようとしましたが、機能しません。

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

バインドするすべてのデータを保持する 1 つの 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 をこのオブジェクトに設定します。{Binding} ではなく、これらの項目のプロパティにバインドするように xaml を変更する必要があります。

レンダリングの遅延を心配することなく、事前に PivotItem がバインドされるコレクションを設定できます。PivotItems は、表示されるまでレンダリングを遅らせます。

于 2012-06-17T05:03:41.457 に答える