Windows Phone高级绑定

时间:2014-11-20 21:08:17

标签: c# wpf windows-phone-7 windows-phone-8 data-binding

使用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,我使用了绑定,但我无法理解这一点。

1 个答案:

答案 0 :(得分:0)

此操作对于简单绑定而言过于复杂。

你想要做的是创建一个&#34;评级&#34;用户控制。然后添加Value依赖项属性。这意味着你可以这样做:

<local:Rating Value="{Binding rating}"/>

控件本身将处理用户输入,将值约束为.5等的倍数