我有一个带有列表视图的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并将标签HorizontalOptions设置为fill。然后它起作用了。
因此它总是正确绑定,但渲染不正确。
答案 0 :(得分:0)
可能是对绑定模式的破坏:
https://docs.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/data-binding/binding-mode
默认情况下,条目具有双向模式,而标签则没有,因此您不能在未指定您要的情况下从Viewmodel更改其内容。
您应该尝试
<Label Text={Binding Upcname, Mode=TwoWay}/>
我希望这会有所帮助。