c# - ObservableCollection 过滤器选择的项目

标签 c# .net observablecollection selectedindex

我有一个我不知道如何解决的问题。

我有一个可观察的集合,当我在文本框中键入时我会过滤项目问题是当我选择过滤的项目时我得到了错误的选择索引。

例如,我在过滤后有一个项目,实际选择的索引是 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/

相关文章:

c# - 如何在通用 Windows 应用程序的 WebView 中调用 javascript 函数

c# - 如何防止在 C# 中出现异常?

.net - 当您运行 .NET 可执行文件(一步一步到程序加载和运行的点)时,究竟会发生什么?

.net - 在 Windows CE 6.0 与 Windows Mobile 6.1 下开发的权衡是什么

wpf - MVVM:处理集合中模型的逻辑子对象

c# - 我可以从 xaml 中过滤集合吗?

c# - 如何加快向 AzureEventHub 发送事件的速度?

c# - 如何动态定义属性并将它们传递给 msbuild 中的另一个目标?

wpf - 如何在 XAML 中绑定(bind)多个 ObservableCollection

c# - 在 winform C# 中检索上次使用的数据