private void ReflexivePropertyChanged(object sender, PropertyChangedEventArgs e)
{
var reflexive = (ReflexiveData)sender;
FlattenedReflexive flattenedField = _flattenInfo[reflexive];
if (e.PropertyName == "IsExpanded")
{
if (reflexive.IsExpanded)
{
flattenedField.Expand();
}
else
{
flattenedField.Contract();
}
}
else if (!_loading &&
(e.PropertyName == "CurrentIndex" || e.PropertyName == "FirstEntryAddress" || e.PropertyName == "EntrySize"))
{
_loading = true;
_tracker.Enabled = false;
if (e.PropertyName == "FirstEntryAddress")
{
// Throw out any cached changes and reset the current index
RecursiveReset(flattenedField.LoadedFields);
if (reflexive.Length > 0)
{
reflexive.CurrentIndex = 0;
}
else
{
reflexive.CurrentIndex = -1;
}
}
else
{
// Cache any changes made to the current page
RecursiveUnload(flattenedField.LoadedFields);
}
// Load the new page in
flattenedField.LoadPage(reflexive, reflexive.CurrentIndex);
// Read any non-cached fields in the page
_reader.ReadReflexiveChildren(reflexive);
RecursiveLoad(flattenedField.LoadedFields);
_tracker.Enabled = true;
_loading = false;
}
}