Обновление 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>
ОБНОВЛЕНИЕ 1: я обнаружил, что добавление цвета фона устраняет один из дубликатов (рис. 2), но это одинв неправильном положении.Как только свойство обновляется до нового значения, неправильная метка исчезает и отображается правильная.И изменение «HorizontalOptions» и «VerticalOptions» на метке просто перемещает неправильную метку вокруг (рис. 3).
У меня есть XAML ContentPage с несколькими дочерними ContentViews внутри.У всех есть свои представления о моделях.У меня есть модели представлений, построенные таким образом, что при вызове метода OnAppearing () хостов ContentPage он вызывает Start () для всех моделей представлений, чтобы установить значения по умолчанию для свойств.Одним из этих свойств является метка, которая получает значение по умолчанию «$ 0.00».Проблема в том, что эта метка отображается дважды в двух разных позициях (см. Скриншот ниже)Как сделать так, чтобы ContentView перерисовывал, чтобы отображалась только правильная метка?
Я провел тестирование и знаю, что существует только одна метка (где-то пропущен ни один дубликат), и я знаю, что именно настройка свойства bindable вызывает проблему.Жесткое кодирование значения в xaml предотвращает это (тогда, конечно, я не могу привязать к нему свойство).
Часть Parent 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>
Применимая часть родительской 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";
}