in src/BehaviorsSDKManaged/Microsoft.Xaml.Interactions/Core/IncrementalUpdateBehavior.cs [237:276]
private void OnContainerContentChanging(ListViewBase sender, ContainerContentChangingEventArgs e)
{
UIElement contentTemplateRoot = e.ItemContainer.ContentTemplateRoot;
ElementCacheRecord elementCacheRecord;
if (this._elementCache.TryGetValue(contentTemplateRoot, out elementCacheRecord))
{
if (!e.InRecycleQueue)
{
foreach (List<PhasedElementRecord> phaseRecord in elementCacheRecord.ElementsByPhase)
{
foreach (PhasedElementRecord phasedElementRecord in phaseRecord)
{
phasedElementRecord.FreezeAndHide();
}
}
if (elementCacheRecord.Phases.Count > 0)
{
e.RegisterUpdateCallback((uint)elementCacheRecord.Phases[0], this.OnContainerContentChangingCallback);
}
// set the DataContext manually since we inhibit default operation by setting e.Handled=true
((FrameworkElement)contentTemplateRoot).DataContext = e.Item;
}
else
{
// clear the DataContext manually since we inhibit default operation by setting e.Handled=true
contentTemplateRoot.ClearValue(FrameworkElement.DataContextProperty);
foreach (List<PhasedElementRecord> phaseRecord in elementCacheRecord.ElementsByPhase)
{
foreach (PhasedElementRecord phasedElementRecord in phaseRecord)
{
phasedElementRecord.ThawAndShow();
}
}
}
}
}