Каков оптимальный способ показать галочку против четырех настроек с формами?

У меня есть экран, который показывает четыре строки: «английский», «ромадзи», «кана» и «кандзи». Пользователь может выбрать один из четырех, и при выборе рядом с ним появится галочка. В настоящее время это реализовано так (только показаны первые два):

        englishSide.GestureRecognizers.Add(new TapGestureRecognizer
        {
            NumberOfTapsRequired = 1,
            Command = new Command(() =>
            {
                englishImage.IsVisible = true;
                romajiImage.IsVisible = false;
                kanaImage.IsVisible = false;
                kanjiImage.IsVisible = false;
            })
        });

        romajiSide.GestureRecognizers.Add(new TapGestureRecognizer
        {
            NumberOfTapsRequired = 1,
            Command = new Command(() =>
            {
                englishImage.IsVisible = false;
                romajiImage.IsVisible = true;
                kanaImage.IsVisible = false;
                kanjiImage.IsVisible = false;
            })
        });

По мере того, как количество вариантов увеличивается с 4 до более, я вижу, что это станет намного сложнее. Есть ли более оптимальный способ сделать это?

Для справки здесь Xaml:

<TableSection Title="Card Front Side">
                    <ViewCell>
                        <StackLayout x:Name="englishSide" Padding="20,0,20,0"
                                Orientation="Horizontal" VerticalOptions="Center">
                            <Label Text="English" XAlign="Center"/>
                            <Image x:Name="englishImage" Source="check.png" 
                                HorizontalOptions="EndAndExpand" IsVisible="false" />
                        </StackLayout>
                    </ViewCell>
                    <ViewCell>
                        <StackLayout x:Name="romajiSide" Padding="20,0,20,0"
                                Orientation="Horizontal" VerticalOptions="Center">
                            <Label Text="Romaji" XAlign="Center"/>
                            <Image x:Name="romajiImage" Source="check.png" 
                                HorizontalOptions="EndAndExpand" IsVisible="false" />
                        </StackLayout>
                    </ViewCell>

person Alan2    schedule 25.09.2016    source источник


Ответы (1)


Что вам нужно, так это правильный шаблон модели представления, где ListView.ItemsSource является IEnumerable<YourViewModel>. Для этого я использую Prism для Xamarin.Forms.

Читать далее:

YourViewModel будет дочерней моделью представления, содержащей всю логику и инкапсулирующей бизнес-объект.

public class MyViewModel
{
    // INotifyPropertyChanged would be needed
    public MyModel Model {get;set;}

    public bool IsChecked {get;set;}

    public string Image => this.IsChecked? "theImage.jpg" : null;
}

Надеюсь, это поможет.

person Thomas Hagström    schedule 25.09.2016