Является ли плохой практикой использование кода с шаблоном MVVM?
Если код связан с представлением, то это необходимо.Иногда вы просто не можете избежать кода в коде позади.Имейте в виду правило: обычно , когда вы начинаете работать с представлением, управление вещами может оказаться довольно громоздким.Если вы найдете способ использовать платформу, в данном случае Xaml, пусть она сделает всю работу за вас.
вещь о видимости, элемент отображается на экране.Пользователь просто не может видеть это.Вот почему пространство занято.Иногда видимость будет работать, а иногда не так много.
В этой ситуации вы можете избежать кода в выделенном коде и придерживаться своей виртуальной машины.
Я бы предложил использовать сетку и использовать конвертер, чтобы скрыть строку сетки.Когда я говорю «скрыть строку», я имею в виду, устанавливая высоту строки равной 0. Таким образом, она отображается, но мы собираемся свернуть ее.Я добавил только две строки, вы можете добавить больше, чтобы разместить больше контента по своему усмотрению.
Редактировать: добавлено примерное пространство имен.Если вы используете Visual Studio, там должен быть intellisense.Вы должны добавить локальное пространство имен, чтобы механизм xaml мог найти класс конвертера.
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:converter="clr-namespace:DataBindingDemos" <-- set the appropriate value
BindingContext="{Binding Main, Source={StaticResource Locator}}"
x:Class="AppValora.Views.Sisquim.VerSisquimView">
<ContentPage.Resources>
<converter:BoolToGridRowVisibilityConverter key="BoolToGridRowVisibilityConverter">
</ContentPage.Resources>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="{Binding IsStackVisible, Converter={StaticResource BoolToGridRowVisibilityConverter}}" />
</Grid.RowDefinitions>
<StackLayout
Grid.Row="0"
Orientation="Horizontal"
HorizontalOptions="CenterAndExpand"
VerticalOptions="Start">
<Image
HorizontalOptions="Center"
Source="{Binding ImageRombo}"
HeightRequest="160"
WidthRequest="160"
IsVisible="{Binding IsVisibleImagenRombo}">
</Image>
<Image
HorizontalOptions="Center"
Source="cuadro_nch"
HeightRequest="160"
WidthRequest="160">
</Image>
</StackLayout>
<!-- STACKLAYOUT YOU WANT TO ELIMINATE -->
<StackLayout Grid.Row="1"
x:Name="StackIsVisible">
<Image
Source="{Binding ImageRomboDos}"
HeightRequest="160"
WidthRequest="160"
IsVisible="{Binding IsVisibleImagenRombo}">
</Image>
</StackLayout>
</Grid>
</ContentPage>
Добавить конвертер
public class BoolToGridRowVisibilityConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return (bool)value ? new GridLength(1, GridUnitType.Auto) : new GridLength(0);
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotSupportedException("Only one way bindings are supported with this converter");
}}
}
Для получения дополнительной информации см. сообщение на форумах Xamarin