我有一个显示四行的屏幕:“英语”,“罗马字”,“假名”和“汉字”。用户可以选择四个中的一个,当选择时,旁边会出现一个复选标记。目前它是这样实现的(只显示前两个):
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>
答案 0 :(得分:1)
您需要的是一个正确的视图模型模式,其中ListView.ItemsSource
是IEnumerable<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;
}
希望有所帮助。