我将名为Messages
的ObservableCollection绑定到Xamarin Forms中的ListView。我按如下方式填充集合:
for (int i=0; i<5; i++) {
Messages.Insert(0,
new Message() {
Text = "M"+i
});
}
这在Android下可以正常工作,我的ListView显示了5条带有文本'M0',..,'M4'
的消息。然而,在iOS下,我会收到这5条消息,但每条消息都显示文本'M4'
。
当我在调试器中执行此操作时,它会显示每条消息的正确文本('M0',..,'M4'
(。因此,数据是正确的,但ListView显示的是每条消息中最后一条消息的文本,而不是正确的文本。
不确定这里发生了什么。有什么想法/解决办法吗?
谢谢!
编辑:请参阅下面我自己的答案/解决方案。
1.基于您的代码,我写了一个在iOS上正确显示的示例供您参考:
这是xaml代码:
<StackLayout>
<ListView x:Name="mylist">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<Label Text="{Binding Text}"></Label>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</StackLayout>
这是背景代码:
public partial class MainPage : ContentPage
{
ObservableCollection<Message> observableCollection { get; set; } = new ObservableCollection<Message>();
public MainPage()
{
InitializeComponent();
for (int i = 0; i < 5; i++)
{
observableCollection.Insert(0, new Message() {Text = "m" + i });
}
mylist.ItemsSource = observableCollection;
}
}
2.根据您的代码,您每次插入的索引位置都是0,因此结果的显示应该是m3,m2,m1,m0。
事实证明,我使用的ListView扩展有一个适用于iOS的自定义渲染器,这导致了问题的出现。一旦我切换到Xamarin的开箱即用ListView,问题就消失了。
从道义上讲,使用控件扩展时要小心。