【问题标题】:Windows Phone advanced bindingWindows Phone 高级绑定
【发布时间】: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


【解决方案1】:

这个操作对于简单的绑定来说太复杂了。

您要做的是创建一个“评级”用户控件。然后添加一个Value 依赖属性。这意味着您可以这样做:

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

控件本身会处理用户输入,将值限制为 0.5 的倍数等。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-27
    • 2014-01-15
    • 2013-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-30
    相关资源
    最近更新 更多