我遇到了一个问题,无法刷新Xamarin的CollectionView
中的GUI元素。
绑定到CollectionView
的ObservableCollection
项目在刷新事件期间被清除并填充新元素,但在屏幕上显示旧的StackLayout
。
原因是Items.Clear()
上的SingleItem
控件未被删除-如何删除?
<CollectionView x:Name="collection"
ItemsSource="{Binding Items}"
SelectionMode="None">
<CollectionView.ItemTemplate>
<DataTemplate>
<StackLayout>
<controls:SingleItem/>
<Grid BackgroundColor="White" HeightRequest="5" HorizontalOptions="Fill" VerticalOptions="End"/>
</StackLayout>
</DataTemplate>
</CollectionView.ItemTemplate>
</CollectionView>
C#-无";不寻常的";这可以正常工作(在断点上(:
void RefreshCommand()
{
List<Item> items = null;
items = GetItems();
if (items != null)
{
Items.Clear();
foreach (var item in items)
Items.Add(item);
}
}
等一下,在你走之前,因为我在下面写下了我的";想法;如何解决。
问题是,我发现没有";清除";或";删除";作为Element
内部成员的GUIAllChildren
的方法:
void RefreshCommand(Action clearCollectionView)
{
List<Item> items = null;
items = GetItems();
if (items != null)
{
Items.Clear();
cleacCollectionView.Invoke();
foreach (var item in items)
Items.Add(item);
}
}
// page.xaml.cs:
...
BindingContext = new Model(() => ???);
...
您可以像这样编写Grid
,并将ObservableCollection
数据绑定到标签,而不是使用<controls:SingleItem/>
<CollectionView x:Name="Collection" ItemsSource="{Binding Items}">
<CollectionView.ItemTemplate>
<DataTemplate>
<Grid BackgroundColor="White" HeightRequest="5" HorizontalOptions="Fill" VerticalOptions="End">
<Label
Text="{Binding itemName}"
FontAttributes="Bold"
x:Name="labelname" VerticalTextAlignment="Center" HorizontalTextAlignment="Center"/>
</Grid>
</DataTemplate>
</CollectionView.ItemTemplate>
</CollectionView>