По какой-то особой причине я не могу использовать Xamarin.Forms Data Binding, я должен напрямую обновить свойства представления, созданного ItemTemplate в ListView.
MainPage.xaml
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage
x:Class="TestListView.MainPage"
xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml">
<Grid>
<ListView x:Name="TestListView" />
<Button
Clicked="Button_Clicked"
HorizontalOptions="Center"
Text="Change last appearing text"
VerticalOptions="Center" />
</Grid>
</ContentPage>
MainPage.xaml.cs
using System.Linq;
using Xamarin.Forms;
namespace TestListView {
public partial class MainPage : ContentPage {
private int lastApprearingItemIndex = -1;
public MainPage() {
InitializeComponent();
TestListView.ItemTemplate = new DataTemplate(() => {
return (new ViewCell() {
View = new Label()
});
});
TestListView.ItemsSource = Enumerable.Range(1, 10000).ToArray();
TestListView.ItemAppearing += TestListView_ItemAppearing;
}
private void TestListView_ItemAppearing(object sender, ItemVisibilityEventArgs e) {
lastApprearingItemIndex = e.ItemIndex;
((Label)(((ViewCell)(TestListView.TemplatedItems[e.ItemIndex])).View)).Text = "test text for id " + (int)(e.Item);
}
private void Button_Clicked(object sender, System.EventArgs e) {
((Label)(((ViewCell)(TestListView.TemplatedItems[lastApprearingItemIndex])).View)).Text = "(changed)test text for id " + lastApprearingItemIndex;
}
}
}
Этот тест хорошо работает в Android
Но в UWP ничего не показывает
Он также хорошо работает в WPF.
Итак, у меня есть два вопроса:
1, Почему это не работает в UWP?
2. Будет ли ListView повторно использовать представление элемента, например ListAdapter в Android?