0

リストボックス、notifypropertychangeイベントでこの問題が発生し、次のページに移行するときにselectedindex=-1を設定しています。

基本的にはリストからアイテムを選びます。そうすることで、アイテムに関する詳細を提供する別のページが開きます。ただし、アイテムを選択するときは、詳細ページに移行した後、selectedindexを-1に設定する必要があります。

それでも、私がコードを書くとき、それがselectedindex=-1に達すると; 行では、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;
            };
    }

誰もがこれがなぜであるか知っていますか?

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 に答える