我有一个简单的视图,在一个地方显示两个条形码。为此,我使用ZXing库。这个想法是在这两个条形码之间切换可见性。所以当视图加载时,它应该显示一个条形码,点击按钮后,它应该切换到另一个。
因此,这两个条形码都有IsVisible属性绑定到ViewModel属性。一个设置为true,另一个设置为false。
问题是视图加载后没有可见的条形码,只有在单击按钮后才开始工作。因此,逻辑和绑定正常,但视图在第一次运行时没有显示任何内容。
视图模型(简化):
private bool _IsQR;
public bool IsQR
{
get => _IsQR;
set
{
SetProperty(ref _IsQR, value);
}
}
private bool _Is128;
public bool Is128
{
get => _Is128;
set
{
SetProperty(ref _Is128, value);
}
}
public ICommand ToogleCode { private set; get; }
public BarcodeViewModel()
{
IsQR = false;
Is128 = true;
ToogleCode = new Command(ToogleCodeHandler);
}
private void ToogleCodeHandler()
{
Is128 = !Is128;
IsQR = !IsQR;
}
视图(简化):
<Grid x:DataType="vm:BarcodeViewModel">
<Grid.RowDefinitions>
<RowDefinition Height="auto"/>
<RowDefinition Height="auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Label Grid.Row="0" Text="{Binding Code}"
LineBreakMode="NoWrap"
HorizontalOptions="Center"
VerticalOptions="Center"
FontSize="Large"
FontAttributes="Bold"
Padding="0,0,0,10"/>
<Button Grid.Row="1" Text="Change" Command="{Binding ToogleCode}"/>
<zxing:ZXingBarcodeImageView Grid.Row="2"
BarcodeValue="{Binding Code}"
BarcodeFormat="QR_CODE"
IsVisible="{Binding IsQR, Mode=TwoWay}">
<zxing:ZXingBarcodeImageView.BarcodeOptions>
<zxcm:EncodingOptions Width="500" Height="500" />
</zxing:ZXingBarcodeImageView.BarcodeOptions>
</zxing:ZXingBarcodeImageView>
<zxing:ZXingBarcodeImageView Grid.Row="2"
BarcodeValue="{Binding Code}"
BarcodeFormat="CODE_128"
Rotation="90"
VerticalOptions="Center"
HorizontalOptions="Center"
IsVisible="{Binding Is128, Mode=TwoWay}">
<zxing:ZXingBarcodeImageView.BarcodeOptions>
<zxcm:EncodingOptions Width="1920" Height="1080" />
</zxing:ZXingBarcodeImageView.BarcodeOptions>
</zxing:ZXingBarcodeImageView>
</Grid>
这不是我第一次看到这个。有一次我填充CollectionView,它没有显示任何东西,直到我在ViewModel的OnAppearing()事件中设置了一个属性。但在这里我不能使它工作。
编辑:它不仅适用于条形码(128)。如果我设置QR = true和128 = false,它会正常工作。因此,问题与ZXingBarcodeImageView相关
3条答案
按热度按时间egdjgwm81#
我做了一个示例来测试,当我点击按钮时,命令Binding不起作用。如果你想在你的按钮中使用命令Binding,你可以使用eventtocommandbehavior类。我想你也许可以在你的视图中使用ButtonClicked Event,例如:
s8vozzvw2#
为bool值给予默认值:
epfja78i3#
我有解决方案。问题不在数据绑定,而是在ZXingBarcodeImageView元素。看起来当Background属性不为空时,它可以正常工作。所以数据绑定是可以的。
我无法删除此问题。