That is because at the end of the code, only the last one change is remaining unchanged. I mean that the last item inside the list makes a change. The first ones, do make a change but that change is soon overwritten by the next element, and this change is also overwritten by the next one and this process continues till the last item in the collection. Since there is no other element to cause a change, that is why this change remains in the UI.
What I would like to tell you, would be to, if you want to show all of the items inside the UI, make them a child for a same parent. Such as, name a simple parent as ChartDataHolder, in XAML it will be,
<stackpanel name="ChartDataHolder">
<!--
</stackpanel>
.. now in the code behind, create a new List and then add these items from the Collection to it. For example, like
var CIdata = await DMService.GetCIStatusAsync();
foreach (var cchart in CIdata)
{
string ename = cchart.CIEntityName;
int pr = Convert.ToInt32(cchart.CIP1Reported);
List<cilist> CIlistItems = new List<cilist>();
CIlistItems.Add(new CIlist() { Name = ename, Amount = pr });
StackPanel panel = new StackPanel();
ChartDataHolder.Children.Add(panel);
}
</cilist></cilist>
.. now, all of the charts will be added independently to the same parent StackPanel and they will be available, because you will be creating a new instance, and won't override any previous data and will be added to the Panel seperately, which way you will get all of the items inside the UI.