ListView中的标签未在Collection Clear上绑定

时间:2019-02-07 04:14:09

标签: c# listview xamarin data-binding

我有一个带有列表视图的Xamarin表单。在视图单元格中,我有一个标签和一个Entry,它们分别绑定到可观察集合中对象的2个属性上。

当我第一次加载表单并将其添加到集合中时,这可以正常工作。然后我调用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。然后,当内容更改时,它没有调整大小(我看不到一种调整大小的方法-所以如果有人知道,请让我知道。)

解决方法是在标签(例如Uknown)上设置FallbackValue并将标签Horizo​​ntalOptions设置为fill。然后它起作用了。

因此它总是正确绑定,但渲染不正确。

1 个答案:

答案 0 :(得分:0)

可能是对绑定模式的破坏:

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

默认情况下,条目具有双向模式,而标签则没有,因此您不能在未指定您要的情况下从Viewmodel更改其内容。

您应该尝试

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

我希望这会有所帮助。