Example #1
0
        private void TagBlockPropertyChanged(object sender, PropertyChangedEventArgs e)
        {
            var block = (TagBlockData)sender;
            FlattenedTagBlock flattenedField = _flattenInfo[block];

            if (e.PropertyName == "IsExpanded")
            {
                if (block.IsExpanded)
                {
                    flattenedField.Expand();
                }
                else
                {
                    flattenedField.Contract();
                }
            }
            else if (!_loading &&
                     (e.PropertyName == "CurrentIndex" || e.PropertyName == "FirstElementAddress" || e.PropertyName == "ElementSize"))
            {
                _loading         = true;
                _tracker.Enabled = false;

                if (e.PropertyName == "FirstElementAddress")
                {
                    // Throw out any cached changes and reset the current index
                    RecursiveReset(flattenedField.LoadedFields);
                    if (block.Length > 0)
                    {
                        block.CurrentIndex = 0;
                    }
                    else
                    {
                        block.CurrentIndex = -1;
                    }
                }
                else
                {
                    // Cache any changes made to the current page
                    RecursiveUnload(flattenedField.LoadedFields);
                }

                // Load the new page in
                flattenedField.LoadPage(block, block.CurrentIndex);

                // Read any non-cached fields in the page
                _reader.ReadTagBlockChildren(block);
                RecursiveLoad(flattenedField.LoadedFields);

                _tracker.Enabled = true;
                _loading         = false;
            }
        }