我有一个我不知道如何解决的问题。
我有一个可观察的集合,当我在文本框中键入时我会过滤项目问题是当我选择过滤的项目时我得到了错误的选择索引。
例如,我在过滤后有一个项目,实际选择的索引是 2,但因为它在我键入时设置集合,所以如果剩下的唯一过滤项目是一个,它会将索引设置为 1。
那么如何选择正确的项目。就像在邮件应用程序中使我的问题更容易理解
这里是选择改变的事件:
private void searchToDoItemsListBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (searchToDoItemsListBox.SelectedIndex == -1)
return;
NavigationService.Navigate(new Uri("/DetailsPage.xaml?selectedItemSearch=" + searchToDoItemsListBox.SelectedIndex, UriKind.Relative));
searchToDoItemsListBox.SelectedIndex = -1;
}
这里是详情页面:
protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
if (NavigationContext.QueryString.TryGetValue("selectedItemSearch", out selectedIndexSearch))
{
int indexSearch = int.Parse(selectedIndexSearch);
DataContext = App.ViewModel.AllToDoItems[indexSearch];
}
}
最佳答案
绑定(bind)到 SelectedItem
<ListBox SelectedItem="{Binding Selected, Mode=TwoWay}" ItemsSource="Binding={Items}">
</ListBox>
而且你必须字段:
public ObservableCollection<ItemType> Items {get;set;} //setted while filtering, does it?
和
private ItemType _selected;
public ItemType Selected
{
get
{
return _selected;
}
set
{
_selected = value;
//here you can save the item.
//For example save the item id, and navigate to DetailsPage
}
}
然后,您可以从列表中获取项目:
protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
if (NavigationContext.QueryString.TryGetValue("selectedItemSearch", out selectedIndexSearch))
{
int id = int.Parse(selectedIndexSearch);
DataContext = GetById(id)
}
}
public ItemType GetByIf(id)
{
for(int i = 0; i < App.ViewModel.AllToDoItems.Count; i++)
{
if(App.ViewModel.AllToDoItems[i].Id == id) return App.ViewModel.AllToDoItems[i];
}
return null;
}
关于c# - ObservableCollection 过滤器选择的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12435551/