ObservableCollection和ListView在iOS下的奇怪行为



我将名为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,问题就消失了。

从道义上讲,使用控件扩展时要小心。

相关内容

  • 没有找到相关文章

最新更新