0

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

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

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

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

谁能解释为什么我的绑定不起作用?

这是我的 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);
    }
}
4

1 回答 1

1

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

编辑:转换器代码也需要更改。格式字符串应为“{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>
于 2013-04-17T11:29:22.080 回答