Skip to content

Commit

Permalink
fix(listview): [WASM] [Skia] Redraw list when scroll viewport changes
Browse files Browse the repository at this point in the history
Fixes bug where materialized elements would not be added to list when its size changes.
  • Loading branch information
davidjohnoliver committed Jan 28, 2022
1 parent 833a6e1 commit 8e6bcea
Show file tree
Hide file tree
Showing 2 changed files with 42 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -1705,8 +1705,42 @@ void RemoveItem()
}
}

[TestMethod]
public async Task When_List_Given_More_Space()
{

var list = new ListView
{
ItemsPanel = NoCacheItemsStackPanel,
ItemTemplate = FixedSizeItemTemplate,
ItemContainerStyle = NoSpaceContainerStyle,
ItemsSource = Enumerable.Range(0,10).Select(i => $"Item {i}").ToArray()
};
var host = new Grid
{
Height = 100,
Children =
{
list
}
};

WindowHelper.WindowContent = host;
await WindowHelper.WaitForLoaded(list);

Assert.IsNotNull(list.ContainerFromIndex(2));
Assert.IsNull(list.ContainerFromIndex(8));

host.Height = 300;

await WindowHelper.WaitForNonNull(() => list.ContainerFromIndex(8));
}

private bool ApproxEquals(double value1, double value2) => Math.Abs(value1 - value2) <= 2;



#region Helper classes
private class When_Removed_From_Tree_And_Selection_TwoWay_Bound_DataContext : System.ComponentModel.INotifyPropertyChanged
{
public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
Expand Down Expand Up @@ -1951,4 +1985,5 @@ protected override DataTemplate SelectTemplateCore(object item)
}
}
}
#endregion
}
Original file line number Diff line number Diff line change
Expand Up @@ -190,6 +190,7 @@ private void OnLoaded(object sender, RoutedEventArgs e)
{
ScrollViewer = scrollViewer;
ScrollViewer.ViewChanged += OnScrollChanged;
ScrollViewer.SizeChanged += OnScrollViewerSizeChanged;
}
else if (parent is ItemsControl itemsControl)
{
Expand Down Expand Up @@ -222,6 +223,7 @@ private void OnUnloaded(object sender, RoutedEventArgs e)
if (ScrollViewer != null)
{
ScrollViewer.ViewChanged -= OnScrollChanged;
ScrollViewer.SizeChanged -= OnScrollViewerSizeChanged;
}

ScrollViewer = null;
Expand Down Expand Up @@ -264,6 +266,11 @@ private void OnScrollChanged(object? sender, ScrollViewerViewChangedEventArgs e)
_lastScrollOffset = ScrollOffset;
}

private void OnScrollViewerSizeChanged(object sender, SizeChangedEventArgs args)
{
OwnerPanel?.InvalidateMeasure();
}

/// <summary>
/// Get the increment to consume scroll changes, based on the size of the disappearing view.
/// </summary>
Expand Down

0 comments on commit 8e6bcea

Please sign in to comment.