如何将ListPicker绑定到TimeSpan的集合?

时间:2013-04-16 22:42:15

标签: windows-phone-7 windows-phone xaml-binding

我正在尝试将我的ListPicker绑定到ObservableCollection中的TimeSpan.Days属性,我也使用Converter来格式化字符串,但我无法使绑定工作。我没有得到任何错误,但ListPicker没有任何项目,我的转换器中的代码不会被执行(断点永远不会被命中)。

我发现如果我绑定到这样的集合:

ItemsSource="{Binding Converter={StaticResource intervalConverter}}"

然后我的转换器中的代码会被执行,但转换函数的“value”参数是整个集合,而不是集合中的单个项目。

有谁可以解释为什么我的绑定不起作用?

这是我的XAML:

<toolkit:ListPicker x:Name="intervalPicker"
    ExpansionMode="ExpansionAllowed"
    ItemsSource="{Binding Days, Converter={StaticResource intervalConverter}}"/>

这是我背后的代码:

public partial class MainPage : PhoneApplicationPage
{
    ObservableCollection<TimeSpan> _intervals;

    // Constructor
    public MainPage()
    {
        InitializeComponent();
        PopulatePicker();
    }

    private void PopulatePicker()
    {
        //Insulin Interval Picker
        _intervals = new ObservableCollection<TimeSpan>();
        _intervals.Add(new TimeSpan(1, 0, 0, 0));
        _intervals.Add(new TimeSpan(2, 0, 0, 0));
        _intervals.Add(new TimeSpan(3, 0, 0, 0));

        intervalPicker.DataContext = _intervals;
    }
}

public class IntervalConverter: IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        int interval = (int)value;
        if(interval > 1)
            return string.Format("{0 days}", interval);
        else
            return string.Format("{0 day}", interval);
    }
}

1 个答案:

答案 0 :(得分:1)

您需要将转换器移动到ListPicker的ItemTemplate。如果你将它与ItemsSource绑定一起使用,那么你告诉框架你需要转换用于items集合的值(这就是整个集合被传递给你的转换器的原因)。

编辑:转换器代码也需要更改。格式字符串应为“{0}天”而不是“{0天}”

这是一些应该接近你想要的xaml:

<toolkit:ListPicker x:Name="intervalPicker"
                    ExpansionMode="ExpansionAllowed"
                    ItemsSource="{Binding}">
    <toolkit:ListPicker.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding Path=Days, Converter={StaticResource intervalConverter}"/>
        </DataTemplate>
    </toolkit:ListPicker.ItemTemplate>
    <toolkit:ListPicker.FullModeItemTemplate>
        <DataTemplate>
            <TextBlock Style={StaticResource PhoneTextTitle2Style}"
                       Text="{Binding Path=Days, Converter={StaticResource intervalConverter}"/>
        </DataTemplate>
    </toolkit:ListPicker.FullModeItemTemplate>
</toolkit:ListPicker>
相关问题