Метка в ListView не является обязательной для Collection Clear - PullRequest
0 голосов
/ 07 февраля 2019

У меня есть форма Xamarin со списком.В ячейке представления у меня есть метка и запись, которые связаны с двумя свойствами объекта в наблюдаемой коллекции.

Когда я впервые загружаю форму и добавляю в коллекцию, это работает отлично.Затем я вызываю Collection Clear ().Затем я добавляю новый элемент в коллекцию, и запись отображается, а метка - нет.Но если я поменяю метку на Entry, то это сработает.

Также, если я добавлю второй элемент в коллекцию, метка на втором и последующих элементах также отобразится.Это только первый после вызова Clear ().

Я что-то упустил для метки?

Это шаблон данных в форме xaml

<DataTemplate>
                <ViewCell>
                    <Grid HeightRequest="60">
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="*" />
                            <ColumnDefinition Width="*" />
                            <ColumnDefinition Width="*" />
                        </Grid.ColumnDefinitions>

                        <Label Text="{Binding UpcName}" Grid.Column="0" VerticalOptions="Center" HorizontalOptions="Center"/>
                        <Entry Keyboard="Numeric" 
                               Text="{Binding Quantity}" 
                               Grid.Column="1" 
                               HorizontalTextAlignment="Center"
                               WidthRequest="40"
                               VerticalOptions="Center" 
                               HorizontalOptions="Center"/>
                        <customControls:ExtendedButton Text="DEL" 
                            Command="{Binding Path=BindingContext.DeleteInventoryCommand, Source={x:Reference UpcListView}}" 
                            CommandParameter="{Binding .}"
                            Style="{StaticResource SmallDestrutiveButtonStyle}"
                            Grid.Column="2" 
                            FontSize="12"
                            VerticalOptions="Center"
                            HorizontalOptions="Center"/>
                    </Grid>
                </ViewCell>
            </DataTemplate>

и это свойство, с которым оно связано

        var inventory = new InventoryItemVM
        {
            Id = upcDetail.Id,
            Upc = upcDetail.UPC,
            UpcName = upcDetail.Name,
            Quantity = 1,
            BrandImage = upcDetail.BottleImage
        };

        Inventories.Add(inventory);

, позже я звоню

Inventories.Clear();

Затем, когда я добавляю инвентарь в следующий раз, на этикетке не отображается имя UpcName.Но добавьте второй, и это делает для этого.Или измените метку для записи, и она будет работать каждый раз.

Любые идеи, пожалуйста?

ОБНОВЛЕНИЕ И ИСПРАВЛЕНИЕ: Если у кого-то еще есть эта проблема, это связано с размером метки (илиточнее НЕ изменяя размеры при изменении контента).

Когда я удалял элемент или очищал список, метка привязывалась к нулевому значению и устанавливала его ширину равной 0. Затем, когда содержимое изменилось, оно не изменило размер (я не вижу способа заставить его изменить размер- так что, если кто-то знает, пожалуйста, дайте мне знать).

Обходным путем было установить FallbackValue на метку (например, Uknown) и установить метки HorizontalOptions для заполнения.Тогда это сработало.

Таким образом, оно всегда связывалось правильно, но не отображалось правильно.

1 Ответ

0 голосов
/ 07 февраля 2019

Вероятно, это дебаза режима привязки:

https://docs.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/data-binding/binding-mode

По умолчанию запись имеет двухсторонний режим, а метка - нет, поэтому вы не можете изменить ее содержимое.из Viewmodel без указания, что вы будете.

вы должны попробовать с

 <Label Text={Binding Upcname, Mode=TwoWay}/>

Надеюсь, это поможет.

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