【发布时间】:2015-01-18 21:41:52
【问题描述】:
我在处理 Windows Phone 绑定和一系列图像时遇到了一些麻烦。假设我的平均评分在 1 到 10 之间,并且我有 5 张图片,例如星级评分系统。现在我想显示这些图像的平均评分。每颗星的值为 2,因此 5 颗星填充是 10 的平均评分,1.5 颗星填充是 3 的平均评分。所以有些会被填满,有些会被填满,有些是空的或半满。
我的 XAML 看起来像:
<Image HorizontalAlignment="Left" VerticalAlignment="Top" Margin="150,-20,0,0" Source="/Images/icon_star.png" Stretch="None"/>
<Image HorizontalAlignment="Left" VerticalAlignment="Top" Margin="166,-20,0,0" Source="/Images/icon_star.png" Stretch="None"/>
<Image HorizontalAlignment="Left" VerticalAlignment="Top" Margin="182,-20,0,0" Source="/Images/icon_star_half.png" Stretch="None"/>
<Image HorizontalAlignment="Left" VerticalAlignment="Top" Margin="198,-20,0,0" Source="/Images/icon_star_empty.png" Stretch="None"/>
<Image HorizontalAlignment="Left" VerticalAlignment="Top" Margin="214,-20,0,0" Source="/Images/icon_star_empty.png" Stretch="None"/>
这是我的模型:
public class Comment
{
public string comment { get; set; }
public int c_id { get; set; }
public double rating { get; set; }
public string created { get; set; }
}
在 Android 中,使用 ratingbar 小部件或使用列表适配器来填充图像很容易,如下所示:
Map<Integer, ImageView> vars = new HashMap<Integer, ImageView>();
vars.put(1, view.star_1);
vars.put(2, view.star_2);
vars.put(3, view.star_3);
vars.put(4, view.star_4);
vars.put(5, view.star_5);
while(i <= 5) {
if(i <= rate) {
ImageView star = vars.get(i);
star.setImageDrawable(getContext().getResources().getDrawable(R.drawable.icon_star));
} else {
if(rate % 2 != 0 && i == (int)(Math.round(rate))) {
ImageView star = vars.get(i);
star.setImageDrawable(getContext().getResources().getDrawable(R.drawable.icon_star_half));
} else {
ImageView star = vars.get(i);
star.setImageDrawable(getContext().getResources().getDrawable(R.drawable.icon_star_dis));
}
}
i++;
}
在 iOS 中,我使用了图像、IBOutletcollection 和 cellForRowAtIndexPath。
对于 Windows,我使用了绑定,但我无法理解这一点。
【问题讨论】:
-
如何限制这些星星只返回 0.5、1、1.5、2、2.5 等?
-
您可以使用十个不同的 BitmapSource,其中第一个显示五个空星,最后一个显示五个填充星。现在您编写一个绑定转换器,将双精度值(1 到 10 之间)转换为适当的 BitmapImage。
标签: c# wpf windows-phone-7 windows-phone-8 data-binding