Windows Phone 高级绑定
本文关键字:绑定 高级 Phone Windows | 更新日期: 2023-09-27 18:31:12
我在使用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中,使用评级栏小部件或使用列表适配器填充图像很容易,如下所示:
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,我使用了绑定,但我无法解决这个问题。
此操作对于简单的绑定来说太复杂了。
您要做的是创建一个"评级"用户控件。然后添加Value
依赖项属性。这意味着您可以这样做:
<local:Rating Value="{Binding rating}"/>
控件本身将处理用户输入,将值限制为 .5 的倍数等。