Windows Phone 7,selectedindex和propertychanged事件问题
我的列表框、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 Model。它从 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;
};
}
有人知道这是为什么吗?
I am having this problem with my listbox, notifypropertychange event, and setting the selectedindex = -1 upon the transition to the next page.
Basically, I select an item from a list. In doing so it opens up to another page to give details about the item. When I select the item, however, I need to make the selectedindex set to -1 after it transitions to the details page.
Yet, when I write the code, once it hits the selectedindex = -1; line, it calls the function again due to the propertychange event firing. Then it passes a null value to the details page, where the application breaks.
Here is my relevant code:
list of feeds to select from. Once you select a particular one, Listbox_SelectionChanged fires.
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.
}
This is what is called next, which is my ViewData Model. It begins at the PropertyChanged event, and then compares the sender. It then proceeds to set the 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);
}
It then proceeds to go to the line: hello.SelectedIndex = 1; where it goes through the above code again, but passing everything as null (as it's all set to -1).
Then it proceeds to pass this information to the pivot page (the details page).
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;
};
}
anyone know why this is?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我会在 listbox_SelectionChanged 方法中检查所选索引是否已经是 -1。如果是,则返回而不执行任何操作。
I'd check in the listbox_SelectionChanged method whether the selected index is already -1. If it is, then just return and do nothing.