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

C# 当页面导航时,列表选择器选择更改事件自动触发2次,c#,windows-phone-8,listpicker,C#,Windows Phone 8,Listpicker,我有一个列表选择器,它包含城市 在我的应用程序中,我将用户上次选择保存到一个文本文件中,这样当用户重新启动应用程序时,他们不必从列表中选择相同的城市,它将自动获取,但当SelectionChanged事件自动触发时,它会将索引0处的城市保存为所选。这打破了我保存用户操作的全部观点,因为每次用户启动程序时,它都会将索引0保存为用户操作就像他没有选择城市一样 同时,selectionchanged自动触发2次 选择代码已更改: private void cities_SelectionChanged

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

在我的应用程序中,我将用户上次选择保存到一个文本文件中,这样当用户重新启动应用程序时,他们不必从列表中选择相同的城市,它将自动获取,但当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>

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

如果我在componentz之前初始化,我会得到空引用异常。我看到,您没有使用绑定,而是直接链接到该项(x:Name='cities')。MVVM可以很好地将所有这些绑定到项目上,并绑定到选中的条目,但是在您的情况下,我只考虑检查StutoCudieDeNestARGS,看看E.新值是否不是NULL/VALUE。
 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 ");
}