我的列表框、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;
};
}
有谁知道这是为什么?