0

我的列表框、notifypropertychange 事件以及在转换到下一页时设置 selectedindex = -1 时遇到了这个问题。

基本上,我从列表中选择一个项目。这样做会打开另一个页面以提供有关该项目的详细信息。但是,当我选择该项目时,我需要在它转换到详细信息页面后将 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; 它再次通过上面的代码,但将所有内容都传递为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;
            };
    }

有谁知道这是为什么?

4

1 回答 1

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.
}
于 2011-09-05T05:10:26.907 回答