iOS 下的 ObservableCollection 和 ListView 奇怪行为
ObservableCollection and ListView strange behavior under 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显示的是每条消息中最后一条消息的文本,而不是正确的文本。
不确定这里发生了什么。任何 ideas/workarounds?
谢谢!
编辑:
请参阅下面我自己的 answer/solution。
1.Based在你的代码上我写了一个在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.According你的代码,你每次插入的索引位置都是0,所以结果的显示应该是m3,m2,m1,m0。
事实证明,我使用的 ListView 扩展有一个 iOS 的自定义渲染器,这导致了问题。一旦我切换到 Xamarin 开箱即用的 ListView,问题就消失了。
故事的士气,使用控件扩展时要小心。
我将名为 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显示的是每条消息中最后一条消息的文本,而不是正确的文本。
不确定这里发生了什么。任何 ideas/workarounds?
谢谢!
编辑: 请参阅下面我自己的 answer/solution。
1.Based在你的代码上我写了一个在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.According你的代码,你每次插入的索引位置都是0,所以结果的显示应该是m3,m2,m1,m0。
事实证明,我使用的 ListView 扩展有一个 iOS 的自定义渲染器,这导致了问题。一旦我切换到 Xamarin 开箱即用的 ListView,问题就消失了。
故事的士气,使用控件扩展时要小心。