Windows Phone 7, выбранный индекс и проблема изменения свойства - PullRequest
0 голосов
/ 05 сентября 2011

У меня проблема с моим списком, событием notifypropertychange и установкой 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.
       }

Это то, что называется следующим, то есть моя модель 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;где он снова проходит через вышеуказанный код, но передает все как ноль (так как все установлено в -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;
            };
    }

кто-нибудь знает, почему это так?

1 Ответ

3 голосов
/ 05 сентября 2011

Я бы проверил в методе 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.
}
...