xamarin form: пользовательский вид в списке на андроиде - PullRequest
0 голосов
/ 11 февраля 2019

Я нашел Xamarin Render UI очень сложно.

У меня есть собственное представление внутри списка, которое содержит список маленьких значков.Каждый элемент может иметь видимый значок.Я понял, что когда я прокручивал вниз и прокручивал назад вверх, то, на котором должен был отображаться этот значок, не показывалось.Я передал объект в настраиваемое представление, чтобы указать, какой из них должен отображаться.

Элемент в списке, локальный: ChildInfoIconsView - это настраиваемое представление.

                                        <StackLayout Orientation="Vertical" 
                                           Grid.Row="0" 
                                           Grid.Column="1"
                                            VerticalOptions="Center"
                                            HorizontalOptions="Start">                              
                                            <Label AutomationId="aChildName" Style="{StaticResource MediumBoldFont}" x:Name="childName" Text="{Binding DisplayName}" HorizontalOptions="StartAndExpand" />
                                            <local:ChildInfoIconsView 
                                                Child="{Binding .}"
                                                VerticalOptions="Fill">
                                            </local:ChildInfoIconsView> 
                                        </StackLayout>

Основной код для настраиваемого представления

public partial class ChildInfoIconsView : ContentView
{
    public static readonly BindableProperty OrientationProperty = BindableProperty.Create(nameof(Orientation), typeof(StackOrientation), typeof(StackOrientation), StackOrientation.Vertical, BindingMode.OneWay, null);
    public static readonly BindableProperty ShowClassroomProperty = BindableProperty.Create(nameof(ShowClassroom), typeof(bool), typeof(bool), true, BindingMode.OneWay, null);
    public static readonly BindableProperty ChildProperty = BindableProperty.Create(nameof(Child), typeof(ChildModel), typeof(ChildModel), null, BindingMode.OneWay, null);

    protected override void OnPropertyChanged(string propertyName = null)
    {
        base.OnPropertyChanged(propertyName);

        if (propertyName.Equals(nameof(Child)))
        {
            if (Child != null)
            {
                this.ImageUnauth.IsVisible = (Child.HasUnauthorized.HasValue) ? Child.HasUnauthorized.Value : false;
                this.ImageMedical.IsVisible = (Child.HasMedical.HasValue) ? Child.HasMedical.Value : false;
                this.ImageBirthday.IsVisible = Child.IsBirthday;
                this.ImageNewChild.IsVisible = !string.IsNullOrEmpty(Child.NewChildFlagImage);
                this.ImageClassroom.IsVisible = (!ShowClassroom) ? false : !string.IsNullOrEmpty(Child.Classroom);

                this.textClass.Text = Child.Classroom;
                this.textClass.IsVisible = (!ShowClassroom) ? false : !string.IsNullOrEmpty(Child.Classroom);
            } 
        }
        else if (propertyName.Equals(nameof(ShowClassroom)))
        {
            this.ImageClassroom.IsVisible = ShowClassroom;
            this.textClass.IsVisible = ShowClassroom;
        }
        else if (propertyName.Equals(nameof(Orientation)))
        {
            this.layout.Orientation = Orientation;
        }
    }

    public ChildInfoIconsView()
    {
        InitializeComponent();
    }

    public StackOrientation Orientation
    {
        get
        {
            return (StackOrientation)GetValue(OrientationProperty);
        }
        set
        {
            SetValue(OrientationProperty, value);
        }
    }

    public bool ShowClassroom
    {
        get
        {
            return (bool)GetValue(ShowClassroomProperty);
        }
        set
        {
            SetValue(ShowClassroomProperty, value);
        }
    }

    public ChildModel Child
    {
        get
        {
            return (ChildModel)GetValue(ChildProperty);
        }
        set
        {
            SetValue(ChildProperty, value);
        }
    }

Отлично работает при использовании старой версии xamarin.forms.При обновлении пакета это происходит на Android.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...