2011-09-05 2 views
0

내 목록 상자, notifypropertychange 이벤트 및 다음 페이지로의 전환시 selectedindex = -1 설정에이 문제가 있습니다.windows phone 7, selectedindex 및 propertychanged 이벤트 문제

기본적으로 목록에서 항목을 선택합니다. 이렇게하면 항목에 대한 세부 정보를 제공하는 다른 페이지가 열립니다. 그러나 항목을 선택하면 세부 정보 페이지로 전환 된 후 selectedindex를 -1로 설정해야합니다.

그러나 코드를 작성하면 selectedindex = -1이됩니다. line에서는 propertychange 이벤트 발생으로 인해 함수를 다시 호출합니다. 그런 다음 응용 프로그램이 중단되는 세부 정보 페이지에 null 값을 전달합니다. 선택할 피드의

목록 :

여기 내 관련 코드입니다. 특정 항목을 선택하면 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. 
     } 

다음은 내 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. 
}