更新2:我已经确定这是由我使用的Xamarin Forms扩展卡视图(XfxCardView)包引起的 . 更改帧的卡片视图可以解决问题(图1) .

<Frame
            Grid.Column="0"
            Grid.Row="0"
            Padding="0"
            CornerRadius="10"
            HasShadow="true">
            <Label
                Margin="12"
                VerticalTextAlignment="Center"
                Text="{Binding Total}"
                FontSize="32"
                HorizontalTextAlignment="Center"
                HorizontalOptions="Center"
                VerticalOptions="Center"
                TextColor="Gray" />
        </Frame>

enter image description here

更新1:我发现添加背景颜色会消除其中一个副本(图2),但它是错误位置的一个 . 一旦属性更新为新值,错误的标签就会消失,并显示正确的标签 . 更改标签上的“HorizontalOptions”和“VerticalOptions”只会移动不正确的标签(图3) .

enter image description here

enter image description here

我有一个XAML ContentPage,里面有多个子ContentView . 都有自己的视图模型 . 我构建了视图模型,以便在调用主机ContentPage的OnAppearing()方法时,它会调用所有视图模型上的Start()以将默认值设置为属性 . 其中一个属性是一个标签,其默认值为“$ 0.00” . 问题是这个单个标签在两个不同的位置绘制两次(见下面的截图) . 如何重新绘制ContentView,以便只显示正确的标签?

我已经完成了测试,并且知道只有一个标签(我错过了某个地方没有重复),我知道这是导致问题的可绑定属性的设置 . 将值硬编码到xaml中会阻止这种情况(当然我无法将属性绑定到它) .

父ContentPage的一部分:

<Grid
     Grid.Row="2"
     Grid.Column="0"
     RowSpacing="0"
     ColumnSpacing="0"
     HorizontalOptions="Fill"
     VerticalOptions="Fill"
     x:Name="SubviewLayout">
            <Grid.ColumnDefinitions>
                <ColumnDefinition
                    Width="100*" />
            </Grid.ColumnDefinitions>
            <Grid.RowDefinitions>
                <RowDefinition
                    Height="100*" />
            </Grid.RowDefinitions>
            <views:SaleItemListView
                x:Name="SalesItemListView" />
            <views:KeypadView
                x:Name="KeypadView" />
 </Grid>

“键盘视图”的适用部分

<Grid
        ColumnSpacing="0"
        HorizontalOptions="Center"
        VerticalOptions="Center">
        <Grid.ColumnDefinitions>
            <ColumnDefinition
                Width="100*" />
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition
                Height="*" />
            <RowDefinition
                Height="Auto" />
        </Grid.RowDefinitions>
        <xfx:XfxCardView
            Grid.Column="0"
            Grid.Row="0"
            CornerRadius="10"
            Elevation="15">
           <Label 
                Margin="12"
                VerticalTextAlignment="Center"
                Text="{Binding Total}"
                FontSize="32"
                HorizontalTextAlignment="Center"
                BackgroundColor="Transparent"
                TextColor="Gray" />
        </xfx:XfxCardView>

Parent的ViewModel的适用部分

public SalesViewModel()
    {
        KeypadViewModel = new KeypadViewModel();
    }

    public override async Task Start()
    {
        await ListViewModel.Start();
        await KeypadViewModel.Start();
    }

KeypadViewModel的适用部分

public string Total { get; set; }

    public override async Task Start()
    {
        Total = "$0.00";
    }

enter image description here