ReadOnlyObservableCollection показывает повторяющиеся значения - PullRequest
0 голосов
/ 06 февраля 2020

У меня проблемы с моим CollectionView, который показывает дубликаты объектов каждый раз, когда я отображаю страницу, то есть в первый раз у меня будет 1 объект (что нормально), но если я перейду и вернусь на эту страницу, это будет продублируйте один и тот же объект, и я получу его дважды, затем трижды ..et c ...

Ниже приведен код в constructor ViewModel моей страницы:

            Cache
            .AutoRefresh(x => x.Code)
            .ObserveOn(RxApp.MainThreadScheduler)
            .Bind(out _list)
            .DisposeMany();

_list является ReadOnlyObservableCollection<AddressViewModel>

Cache является IObservable<IchangeSet<AddressModel, string>> полученным из GetAllObjects из Akavache кэша.

                _blobCache
                .GetAllObjects<AddressModel>()
                .ToObservableChangeSet(t => t.Code)
                .AsObservableCache()
                .Connect();

Привязка к моему CollectionView is

this.OneWayBind(ViewModel, vm => vm.List, v => v.addressList.ItemsSource).DisposeWith(disposables);

Спасибо за любую помощь или подсказку

ОБНОВЛЕНИЕ

Дублирование происходит ТОЛЬКО при навигации между вкладками, если я pu sh новая страница и go назад я снова нахожу 1 объект, который является предполагаемым поведением.

Вот код, устанавливающий BindingContext страницы

В коде позади TabbedPage

public partial class MainTabbedPage : ReactiveTabbedPage<MainViewModel>
    {
        public MainTabbedPage()
        {
            InitializeComponent();
            this.WhenActivated(
                disposables =>
                {
                    this
                        .OneWayBind(this.ViewModel, x => x.AddressVm, x => x.addressView.ViewModel)
                        .DisposeWith(disposables);
                    //other tabs...
                });
        }
    }

В MainViewModel

        public AddressViewModel AddressVm => new AddressViewModel(HostScreen);

        public MainViewModel(IScreen hostScreen) : base(hostScreen)
        {
        }
...