protected DefaultDeckTraversalModel(Guid id, DeckModel deck, EntryFilterDelegate filter)
            : base(id, deck)
        {
            this.m_HandleEntriesChangedHelperDelegate   = new MethodInvoker(this.HandleEntriesChangedHelper);
            this.m_HandleEntriesChangedCallbackDelegate = new AsyncCallback(this.HandleEntriesChangedCallback);

            this.m_AbsCurrentSlideIndex = -1;

            this.m_Parents = new Stack();
            this.m_Filter  = filter;

            this.Deck.TableOfContents.Changed["Entries"].Add(new PropertyEventHandler(this.HandleEntriesChanged));

            using (Synchronizer.Lock(this.SyncRoot)) {
                using (Synchronizer.Lock(this.Deck.TableOfContents.SyncRoot)) {
                    this.Reset();
                }
            }

            this.HandleEntriesChanged(this.Deck.TableOfContents, null);
        }
        protected DefaultDeckTraversalModel(Guid id, DeckModel deck, EntryFilterDelegate filter)
            : base(id, deck)
        {
            this.m_HandleEntriesChangedHelperDelegate = new MethodInvoker(this.HandleEntriesChangedHelper);
            this.m_HandleEntriesChangedCallbackDelegate = new AsyncCallback(this.HandleEntriesChangedCallback);

            this.m_AbsCurrentSlideIndex = -1;

            this.m_Parents = new Stack();
            this.m_Filter = filter;

            this.Deck.TableOfContents.Changed["Entries"].Add(new PropertyEventHandler(this.HandleEntriesChanged));

            using (Synchronizer.Lock(this.SyncRoot)) {
                using (Synchronizer.Lock(this.Deck.TableOfContents.SyncRoot)) {
                    this.Reset();
                }
            }

            this.HandleEntriesChanged(this.Deck.TableOfContents, null);
        }