2012-01-09 72 views
1

我在WP7应用程序保存在IsolatedStorage数据,这个数据是一个的ObservableCollection的ObservableCollection <T>火灾SelectionChanged事件

那么我将数据加载到应用程序一个的ObservableCollection是databinded到listview与数据模式

但是,当我这样做(或只是将数据添加到数据绑定列表)在构造它触发ListBox selectionchanged事件,所以在我的应用程序完全加载之前,会发生这种情况。

我对的SelectionChanged以显示有关所点击对象的详细信息的事件和此崩溃发生这种情况时(的SelectedIndex是0为某种原因使在加载的列表对象1加载时,全自动选择)

public partial class MainPage : INotifyPropertyChanged 
{ 
    public ObservableCollection<Note> NotesCollection { get; set; } 
    public CollectionViewSource NotesViewSource; 
    private readonly IsolatedStorageSettings settings; 

    // Constructor 
    public MainPage() 
    { 
     InitializeComponent(); 
     NotesCollection = new ObservableCollection<Note>(); 

     settings = IsolatedStorageSettings.ApplicationSettings; 

     if (settings.Contains("Notes")) 
     { 
      NotesCollection = (ObservableCollection<Note>)settings["Notes"]; 
     } 
     else 
     { 
      settings.Add("Notes", NotesCollection); 
     } 

     NotesViewSource.View.Refresh(); 

     //var note = new Note("hej", "hej", DateTime.Now, DateTime.Now); 
     //NotesCollection.Add(note); this also fires the event 

     NotesViewSource = new CollectionViewSource { Source = NotesCollection }; 
     DataContext = this; 
     ListBoxNotes.ItemsSource = NotesViewSource.View; 
    } 

我的Selectionchanged

private void ListBoxNotesSelectionChanged(object sender, SelectionChangedEventArgs e) 
    { 
     if (ListBoxNotes.SelectedIndex == -1) 
      return; 

     var note = ListBoxNotes.SelectedItem as Note; 

     if (!(note is Note)) return; 

     (Application.Current as App).Note = note; 

     ListBoxNotes.SelectedIndex = -1; 
     NavigationService.Navigate(new Uri("/Views/DetailsView.xaml", UriKind.Relative)); 
    } 
+2

问题是什么? – 2012-01-09 20:34:28

+0

抛出什么异常? – 2012-01-09 21:28:02

回答

4

如果你想项添加到OC任何绑定可能火中,然后将下面的行

InitializeComponent(); 

后,其中加入项目点。当调用此方法时,将创建所有UI并设置绑定。您可以右键单击并转到定义以查看发生的情况。

1

我会连接到Loaded事件。

使用私人和公共。注意私人小写字母。

private ObservableCollection<Note> notesCollection 

使SelectedIndex成为公共属性并绑定到它。 当您分配私人侧设置为-1;

private int selectedIndex = -1; 

默认情况下,选定的索引是0.并且选择的索引更改始终会在应用程序启动时触发。您只需在调用事件之前设置selectedIndex = -1。

SelectedIndex作为公共属性我会做集合中的逻辑,甚至没有更改的事件。

+0

如果我不从独立存储或我创建的2个调试行加载数据,那么事件不会被触发。如果我在应用程序运行时添加数据,那么neihten – Mech0z 2012-01-09 21:37:19

+0

如果没有任何限制,那么甚至不会触发 - 这应该不是什么大惊喜。至于添加不改变选定索引的数据,那么你为什么期望它被触发?在事件触发之前,我没有回答您如何将选定索引指定为-1的问题吗?那不是你的问题吗?如果这不是你的问题,那么问题是什么? – Paparazzi 2012-01-09 22:00:33