2011-09-05 92 views
0

我遇到了这个问题,我的列表框,notifypropertychange事件,并设置selectedindex = -1转换到下一页时。windows phone 7,selectedindex和propertychanged事件问题

基本上,我从列表中选择一个项目。这样做可以打开另一个页面来提供有关该项目的详细信息。但是,当我选择该项目时,我需要在转换到详细信息页面后将selectedindex设置为-1。然而,当我编写代码时,一旦它碰到selectedindex = -1;行,它会由于propertychange事件触发而再次调用该函数。然后它将一个空值传递给应用程序中断的详细信息页面。

这是我的相关代码:

要从中选择的订阅源列表。一旦你选择一个特定的,Listbox_SelectionChanged触发。

public UserSubmitted() 
    { 
     InitializeComponent(); 
     Loaded += delegate(object sender, RoutedEventArgs e) 
        { 
         this.DataContext = App.ViewModel; 
        }; 
    } 

    private void listbox_SelectionChanged(object sender, SelectionChangedEventArgs e) 
     { 
       NavigationService.Navigate(new Uri("/PivotPage1.xaml", UriKind.Relative)); 
       hello.SelectedIndex = -1; //hello = listbox name. 
     } 

这就是我所说的next,这是我的ViewData模型。它从PropertyChanged事件开始,然后比较发件人。然后继续设置SelectedItem。

public ObservableCollection<RssItem> FeedItems 
    { 
     get { return _feedItems; } 

     set 
     { 
      if (_feedItems == value) 
       return; 
      _feedItems = value; 
      NotifyPropertyChanged(this, new PropertyChangedEventArgs("FeedItems")); 
     } 
    } 

    public string FeedTitle 
    { 
     get { return _FeedTitle; } 
     set 
     { 
      if (_FeedTitle == value) 
       return; 
      _FeedTitle = value; 
      NotifyPropertyChanged(this, new PropertyChangedEventArgs("FeedTitle")); 
     } 
    } 

    public RssItem SelectedItem 
    { 
     get { return _SelectedItem; } 
     set 
     { 
      if (_SelectedItem == value) 
       return; 
      _SelectedItem = value; 
      NotifyPropertyChanged(this, new PropertyChangedEventArgs("SelectedItem")); 
     } 
    } 


    public event PropertyChangedEventHandler PropertyChanged; 

    private void NotifyPropertyChanged(object sender, PropertyChangedEventArgs args) 
    { 
     if (PropertyChanged != null) 
      PropertyChanged(sender, args); 
    } 

然后继续去行:hello.SelectedIndex = 1;它再次通过上述代码,但将所有内容作为null传递(因为它全部设置为-1)。

然后继续将此信息传递到数据透视页面(详细信息页面)。

public PivotPage1() 
    { 
     InitializeComponent(); 
     Loaded += (sender, e) => 
      { 
       this.DataContext = App.ViewModel; 
       var selectedItem = App.ViewModel.SelectedItem; 
       var pi = ItemPivot.Items.First(p => p == selectedItem); //breaks here as null. 
       ItemPivot.SelectedItem = pi; 
      }; 
    } 

任何人都知道这是为什么?

+0

您能否给我们推理为什么您需要将SelectedIndex设置为-1?当然是 – ctacke

+0

。当从选择中选择特定的供稿时,为了查看详细信息,以及何时详细信息,如果我点击详细信息的后退按钮,我无法在选择时选择相同的供稿。 – topcoderwannabe

+0

所以这是它的问题,回来了,不能够选择相同的饲料。因此,如果我选择位置索引为47(第48个提要)的提要,我会查看详细信息并返回,直到更改索引后才能选择第48个提要。 – topcoderwannabe

回答

3

我会检查listbox_SelectionChanged方法是否所选的索引已经是-1。如果是的话,那就回去,不要做任何事情。

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

    NavigationService.Navigate(new Uri("/PivotPage1.xaml", UriKind.Relative)); 
    hello.SelectedIndex = -1; //hello = listbox name. 
}