【问题标题】:Listpicker binding issue WP7Listpicker绑定问题WP7
【发布时间】:2011-11-17 02:40:50
【问题描述】:

我在尝试将我创建的对象绑定到列表选择器时遇到问题。我已经成功使用带有字符串和整数的列表选择器,但是在尝试使用我自己的类/对象时遇到了问题。

这是 XML(我有两个列表选择器,一个有效,一个无效)

                            <toolkit:ListPicker 
                            x:Name="CountryListPicker" 
                            Margin="0,2,0,10" Width="458" 
                            BorderThickness="3" FullModeHeader="Country"
                            CacheMode="BitmapCache">
                            <toolkit:ListPicker.ItemTemplate>
                                <DataTemplate>
                                    <StackPanel Orientation="Horizontal">
                                        <Border Background="LightBlue" Width="34" Height="34">
                                            <TextBlock Text="{Binding _code}" FontSize="16" HorizontalAlignment="Center" VerticalAlignment="Center"/>
                                        </Border>
                                        <TextBlock Text="{Binding _name}" Margin="12 0 0 0"/>
                                    </StackPanel>
                                </DataTemplate>
                            </toolkit:ListPicker.ItemTemplate>
                            <toolkit:ListPicker.FullModeItemTemplate>
                                <DataTemplate>
                                    <StackPanel Orientation="Horizontal" Margin="0 21 0 20">
                                        <TextBlock Text="{Binding _name}" Margin="16 0 0 0" FontSize="43" FontFamily="{StaticResource PhoneFontFamilyLight}"/>
                                    </StackPanel>
                                </DataTemplate>
                            </toolkit:ListPicker.FullModeItemTemplate>
                        </toolkit:ListPicker>

                        <toolkit:ListPicker
                            x:Name="testPicker"
                            Header="Accent color" 
                            FullModeHeader="ACCENTS" 
                            CacheMode="BitmapCache">
                            <toolkit:ListPicker.ItemTemplate>
                                <DataTemplate>
                                    <StackPanel Orientation="Horizontal">
                                        <TextBlock Text="{Binding}" Margin="12 0 0 0"/>
                                    </StackPanel>
                                </DataTemplate>
                            </toolkit:ListPicker.ItemTemplate>
                            <toolkit:ListPicker.FullModeItemTemplate>
                                <DataTemplate>
                                    <StackPanel Orientation="Horizontal" Margin="0 21 0 20">
                                        <TextBlock Text="{Binding}"
                                   Margin="16 0 0 0"
                                   FontSize="43"
                                   FontFamily="{StaticResource PhoneFontFamilyLight}"/>
                                    </StackPanel>
                                </DataTemplate>
                            </toolkit:ListPicker.FullModeItemTemplate>
                        </toolkit:ListPicker>`

第一个列表选择器是我的新对象绑定一个,第二个是绑定一个字符串。

下面是代码:

        ObservableCollection<Country> countries = new ObservableCollection<Country>();
        countries.Add(new Country { _code = "US", _name = "United States1"});
        countries.Add(new Country { _code = "US", _name = "United States2" });
        countries.Add(new Country { _code = "US", _name = "United States3" });
        countries.Add(new Country { _code = "US", _name = "United States4" });
        countries.Add(new Country { _code = "US", _name = "United States5" });
        countries.Add(new Country { _code = "US", _name = "United States6" });
        this.CountryListPicker.ItemsSource = new ReadOnlyCollection<Country>(countries);

        ObservableCollection<string> _accentColors = new ObservableCollection<string>();
        _accentColors.Add("Blue");
        _accentColors.Add("Blue2");
        _accentColors.Add("Blue3");
        _accentColors.Add("Blue4");
        _accentColors.Add("Blue5");
        _accentColors.Add("Blue6");
        _accentColors.Add("Blue7");
        this.testPicker.ItemsSource = new ReadOnlyCollection<string>(_accentColors);

第二个列表选择器很好,我认为这是因为它包含字符串。

我损坏的列表选择器显示所有正确的数据,但是当我选择一个列表选择器时,它没有选择它。该应用程序加载完整的列表选择器,然后单击其中一个项目,当我返回主视图时,所选项目不会反映在列表选择器中。

有人有什么想法吗?还需要我解释吗?

【问题讨论】:

  • 嗨,有一个新版本的 wp7 工具包,它修复了它的ListPicker 中的很多错误,你可能想去看看。 :) silverlight.codeplex.com/releases/view/75888
  • 谢谢,但我使用的是最新的。我认为更新会解决它,但它只会解决滚动问题。我的对象是否必须实现某种接口来通知 UI 已发生选择?
  • 我还在 CodePlex 上发布了这个问题,供那些想要关注这个问题的人使用。如果他们对我有用,我会在这里发布任何答案。 silverlight.codeplex.com/workitem/9839
  • 抱歉刚刚看到你的cmets,很高兴你知道了。我认为这是有道理的。当您导航回主页时,ListPicker 会再次加载并重置其ItemsSource,这就是它丢失SelectedIndex 的原因。

标签: windows-phone-7 binding listpicker


【解决方案1】:

这是我自己想出来的。我有一个加载函数,列表选择器正在初始化。当列表选择器从全屏视图返回时,看起来加载被“加载”,这反过来又重置了 selectedIndex。修复很简单,只需将列表的创建以及将 itemSource 从 Loaded 函数设置到构造函数中即可。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-28
    • 1970-01-01
    • 2011-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多