列表选择器选择更改事件在页面导航时自动触发2次

时间:2014-08-06 07:25:58

标签: c# windows-phone-8 listpicker

我有列表选择器,它包含城市。

在我的应用程序中,我将用户最后一个选择保存到文本文件中,因此当用户重新启动应用程序时,他们不必从列表中选择相同的城市,它将自动获取,但是当SelectionChanged事件自动触发时,它会将索引0处的城市保存为选择。这打破了我关于保存用户操作的全部观点,因为每次用户启动程序时它都会将索引0保存为用户操作,就像他没有选择城市一样。

此外,selectionchanged会自动激活2次。

选择代码更改:

private void cities_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    i++;
    MessageBox.Show(i.ToString());
    ISF = IsolatedStorageFile.GetUserStoreForApplication();
    using (StreamWriter SW = new StreamWriter(new IsolatedStorageFileStream("citycelection.txt", FileMode.Create, FileAccess.Write, ISF)))
    {
        SW.WriteLine(cities.SelectedIndex.ToString());
        SW.Close();
    }
}       

xaml代码:

<phone:PhoneApplicationPage.Resources>
    <DataTemplate x:Name="lpkItemTemplate">
        <TextBlock Text="{Binding Country}"  />
    </DataTemplate>
    <DataTemplate x:Name="lpkFullItemTemplate">
        <TextBlock Text="{Binding Country}" />
    </DataTemplate>
</phone:PhoneApplicationPage.Resources>

<toolkit:ListPicker  FullModeItemTemplate="{Binding lpkFullItemTemplate}" FontSize="20"
               ItemTemplate="{Binding lpkItemTemplate}" SelectionChanged="cities_SelectionChanged"  x:Name="cities" Height="80">

</toolkit:ListPicker>

添加项目:

 public MainPage()  
 {

   InitializeComponent();
    _timer.Interval = TimeSpan.FromMilliseconds(1000);
    cities.Items.Add("        ");
    cities.Items.Add("Banovići");
    cities.Items.Add("Banja Luka");
    cities.Items.Add("Bihać");
    cities.Items.Add("Bijeljina");
    cities.Items.Add("Bileća");
    cities.Items.Add("Bos.Brod ");
    cities.Items.Add("Bos.Dubica ");
}

1 个答案:

答案 0 :(得分:0)

在初始化组件之前填充列表(城市),假设您使用绑定将城市绑定到视图。这将在第一次触发时,因为列表已加载,因此完成了第一次选择(空)。