зеркало из https://github.com/DeGsoft/maui-linux.git
119 строки
2.5 KiB
C#
119 строки
2.5 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.ComponentModel;
|
|
using System.Diagnostics;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using Xamarin.Forms.Internals;
|
|
|
|
namespace Xamarin.Forms.Controls
|
|
{
|
|
public class ListPage : ContentPage
|
|
{
|
|
ListScreen _listScreen;
|
|
public ListPage ()
|
|
{
|
|
_listScreen = new ListScreen ();
|
|
Content = new StackLayout {
|
|
Children = {
|
|
new Label {Text = "Foo"},
|
|
_listScreen.View
|
|
}
|
|
};
|
|
}
|
|
}
|
|
|
|
public class ListScreen
|
|
{
|
|
public ListView View { get; private set; }
|
|
|
|
internal class A : INotifyPropertyChanged
|
|
{
|
|
string _text;
|
|
public string Text {
|
|
get {
|
|
return _text;
|
|
}
|
|
set {
|
|
_text = value;
|
|
if(PropertyChanged != null)
|
|
PropertyChanged(this, new PropertyChangedEventArgs("Text"));
|
|
}
|
|
}
|
|
|
|
#region INotifyPropertyChanged implementation
|
|
|
|
public event PropertyChangedEventHandler PropertyChanged;
|
|
|
|
#endregion
|
|
}
|
|
|
|
[Preserve (AllMembers = true)]
|
|
internal class ViewCellTest : ViewCell
|
|
{
|
|
static int s_inc = 0;
|
|
|
|
public ViewCellTest ()
|
|
{
|
|
var stackLayout = new StackLayout {
|
|
Orientation = StackOrientation.Horizontal
|
|
};
|
|
|
|
var label = new Label ();
|
|
label.SetBinding (Label.TextProperty, "Text");
|
|
|
|
var box = new BoxView {WidthRequest = 100, HeightRequest = 10, Color = Color.Red};
|
|
|
|
stackLayout.Children.Add (label);
|
|
stackLayout.Children.Add (box);
|
|
|
|
View = stackLayout;
|
|
}
|
|
|
|
protected override void OnAppearing ()
|
|
{
|
|
base.OnAppearing ();
|
|
Debug.WriteLine ("Appearing: " + (BindingContext as A)?.Text + " : " + s_inc);
|
|
s_inc++;
|
|
}
|
|
|
|
protected override void OnDisappearing ()
|
|
{
|
|
base.OnDisappearing ();
|
|
Debug.WriteLine ("Disappearing: " + (BindingContext as A)?.Text + " : " + s_inc);
|
|
s_inc++;
|
|
}
|
|
}
|
|
|
|
public ListScreen ()
|
|
{
|
|
|
|
View = new ListView (ListViewCachingStrategy.RecycleElement);
|
|
|
|
View.RowHeight = 30;
|
|
|
|
var n = 500;
|
|
var items = Enumerable.Range (0, n).Select (i => new A {Text = i.ToString ()}).ToList ();
|
|
View.ItemsSource = items;
|
|
|
|
View.ItemTemplate = new DataTemplate (typeof (ViewCellTest));
|
|
|
|
View.ItemSelected += (sender, e) => {
|
|
var cell = (e.SelectedItem as A);
|
|
if (cell == null)
|
|
return;
|
|
var x = int.Parse (cell.Text);
|
|
if (x == 5) {
|
|
n += 10;
|
|
View.ItemsSource = Enumerable.Range (0, n).Select (i => new A { Text = i.ToString () }).ToList ();
|
|
} else {
|
|
cell.Text = (x + 1).ToString ();
|
|
}
|
|
};
|
|
|
|
|
|
}
|
|
}
|
|
}
|