Элементы ListView обновляются только после прокрутки обратно в представление - Xamarin Forms - PullRequest
0 голосов
/ 27 апреля 2018

Я создал список, в котором есть дети, чей фон связан с itemssource.

Это хорошо работает на Android с вызванным событием PropertyChanged.

Но, к сожалению, на iOS это работает не так гладко, изменение фона отражается только после того, как я прокрутил элемент вне поля зрения и вернулся в представление, чтобы перерисовать его.

Есть ли другой способ сделать обновление содержимого вручную?

Код:

<ListView x:Name="ListView" ItemsSource="{Binding ListSource}" RowHeight="50">
        <ListView.ItemTemplate>
          <DataTemplate>
            <ViewCell>
              <ViewCell.View>
                <ContentView Padding="10" BackgroundColor="{Binding BackgroundColor}">
                  <Label Text="{Binding Name}" HorizontalOptions="Center" TextColor="White" />
                </ContentView>
              </ViewCell.View>
            </ViewCell>
          </DataTemplate>
        </ListView.ItemTemplate>
      </ListView>

Обработка элементаНажмите, чтобы изменить фон и удалить выбранный элемент.

ListView.ItemTapped += async (s, e) =>
{
    var list = ListSource;

    var listItem = list.First(c => c.Id == ((ListItem)e.Item).Id);

    listItem.Selected = !listItem.Selected;

    SelectListSource = list;

    ListView.SelectedItem = null;

};

код в модели:

    public Boolean Selected
    {
        get
        {
            return _selected;
        }
        set
        {
            _selected = value;
            if (PropertyChanged != null)
                PropertyChanged(this, new PropertyChangedEventArgs("BackgroundColor"));
        }
    }                 

    public Color BackgroundColor
    {
        get
        {
            if (Selected)
                return Color.Black;
            else
                return Color.Blue
        }
    }

1 Ответ

0 голосов
/ 27 апреля 2018

Хорошо, так что я нашел решение, используя XFGloss .

Добавлена ​​привязка к ViewCell с помощью этого nuget.

<ViewCell xfg:CellGloss.BackgroundColor="{Binding BackgroundColor}">
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...