0

更新 2:我确定这是由我正在使用的 Xamarin Forms Extended Card View (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> 

在此处输入图像描述

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

在此处输入图像描述 在此处输入图像描述

我有一个 XAML ContentPage,里面有多个子 ContentView。都有自己的视图模型。我构建了视图模型,以便在调用主机 ContentPage 的 OnAppearing() 方法时,它会在所有视图模型上调用 Start() 以将默认值设置为属性。这些属性之一是获取默认值“$0.00”的标签。问题是这个单一标签在 2 个不同的位置绘制了两次(见下面的截图)。如何使 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";
    }

在此处输入图像描述

4

0 回答 0