对表单中的四个设置显示复选标记的最佳方法是什么?

时间:2016-09-25 04:30:08

标签: xamarin xamarin.forms

我有一个显示四行的屏幕:“英语”,“罗马字”,“假名”和“汉字”。用户可以选择四个中的一个,当选择时,旁边会出现一个复选标记。目前它是这样实现的(只显示前两个):

        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>

1 个答案:

答案 0 :(得分:1)

您需要的是一个正确的视图模型模式,其中ListView.ItemsSourceIEnumerable<YourViewModel>。我使用Prism for 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;
}

希望有所帮助。