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 に答える