#c# #android #xamarin.forms #mvvm #prism
#c# #Android #xamarin.forms #mvvm #prism
Вопрос:
Во время моей навигации с помощью «Меню гамбургеров» в Prism.Forms
( Master Detail Page
) моя текущая выбранная страница, с которой я перехожу, действует странно, как будто она обновляется / сбрасывается. На этой конкретной странице у меня есть «логический рендеринг», XAML
где я играю со IsVisible
свойством. Существует сценарий, в котором я должен видеть только некоторое содержимое в формате PNG, покрывающее содержимое внизу, но когда я перемещаюсь с помощью Hamburger, PNG исчезает, и я могу видеть содержимое, которого не должен видеть на мгновение. Похоже, что привязки свойств отключены или что-то в этом роде. CollectionViews
внизу PNG пусто, все выглядит как в предварительном просмотре Visual Studio Xaml во время кодирования, где XAML
он понятия не имеет о привязках, он просто показывает все с содержимым по умолчанию.
Эта XAML
страница ( MainPage.xaml
) выглядит следующим образом:
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Image Source="nfc.png" IsVisible="{Binding IsFirstRead}" BackgroundColor="White" />
<Button Grid.Row="1" Text="NotFirstRead" Command="{Binding NotFirstReadCommand}" />
<Grid IsEnabled="{Binding IsFirstRead, Converter={StaticResource InverseBoolean}}"
Opacity="{Binding IsFirstRead, Converter={StaticResource InverseBoolToDigit}}"
HorizontalOptions="CenterAndExpand" VerticalOptions="CenterAndExpand">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Button Grid.Row="0" Text="{Static resources:Strings.Button_WriteTag}" Command="{Binding WriteTagCommand}" />
<Button Grid.Row="1" Text="FirstRead" Command="{Binding FirstReadCommand}" />
<CollectionView Grid.Row="2" ItemsSource="{Binding FrontControlsCollection}" BackgroundColor="Yellow">
<CollectionView.ItemTemplate>
<DataTemplate>
<StackLayout Orientation="Vertical" >
<Label Text="{Binding MemoryMapItem.Name}" />
<Entry Text="{Binding NewValue}" Margin="0" BackgroundColor="AliceBlue">
<Entry.Triggers>
<DataTrigger TargetType="Entry" Binding="{Binding MemoryMapItem.DataType}" Value="{Static dt:DataType.Int}">
<Setter Property="Keyboard" Value="Numeric" />
</DataTrigger>
</Entry.Triggers>
</Entry>
</StackLayout>
</DataTemplate>
</CollectionView.ItemTemplate>
</CollectionView>
<CollectionView Grid.Row="3" ItemsSource="{Binding MifarePagesCollection}" BackgroundColor="Red">
<CollectionView.ItemTemplate>
<DataTemplate>
<Label Text="{Binding RecordView}" />
</DataTemplate>
</CollectionView.ItemTemplate>
</CollectionView>
</Grid>
</Grid>
XAML
корня (MDP):
<MasterDetailPage.Master>
<ContentPage Title="Menu">
<StackLayout Padding="20">
<Button Text="{Static resources:Strings.Label_Home }" Command="{Binding NavigateCommand}" CommandParameter="NavigationPage/MainPage" />
<Button Text="{Static resources:Strings.Label_Language}" Command="{Binding NavigateCommand}" CommandParameter="NavigationPage/LanguagePage" />
</StackLayout>
</ContentPage>
</MasterDetailPage.Master>
Корень VM
:
public class RootPageViewModel : ViewModelBase
{
private DelegateCommand<string> _navigateCommand;
public DelegateCommand<string> NavigateCommand => _navigateCommand ??= new DelegateCommand<string>(ExecuteNavigateCommand);
private async void ExecuteNavigateCommand(string uri)
{
await NavigationService.NavigateAsync(uri);
}
public RootPageViewModel(INavigationService navigationService) : base(navigationService)
{
}
}
Вот видео, показывающее проблему:
https://drive.google.com/file/d/1Z5htYQrznG86C67AmBJ8hCl9_x_FzN88/view?usp=sharing
Здесь вы даже можете увидеть, что PNG на самом деле не исчезает, а скорее z-index
находится ниже, чем все остальное (вы можете видеть это между элементами).
Комментарии:
1. Очень интересно…. Я вижу аналогичные проблемы с макетом с вкладками (также с использованием Prism)…
2. Точно. Мой друг использует макет с вкладками, как и вы, и у него такая же проблема
3. Что он собирается сделать, чтобы это исправить? Я подумал о том, чтобы попробовать оболочку с вкладками, но не уверен, готова ли она к производству ….? Также рассматривается Sharpnado — но это, похоже, более масштабный рефакторинг, который я еще не проводил, просто чтобы проверить, работает ли он лучше….