2011-03-08 80 views
2

我的列表框与CollectionView Source绑定。当我更改过滤器时,它将自动选择Listox中的第一个项目。在CollectionViewSource.Filter上的列表框中选择第一个项目

App.ViewModel.TasksViewSource.Filter += new System.Windows.Data.FilterEventHandler(Tasks_Filter); 

void Tasks_Filter(object sender, System.Windows.Data.FilterEventArgs e) 
{ 
    if (e.Item == null) 
     return; 
    Task task = e.Item as Task; 
    e.Accepted = task.Id.Equals(TaskId); 
} 

private void MainListBox_SelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
    if (TasksListBox.SelectedIndex == -1) 
     return; 
    Task selectedTask = App.ViewModel.AllTasks[TasksListBox.SelectedIndex]; 
    TasksListBox.SelectedIndex = -1; 
    NavigationService.Navigate(new Uri("/Views/TaskDetailsPage.xaml?taskId=" + selectedTask.Id, UriKind.Relative)); 
} 

请帮帮我。

回答

0

你真的想要什么?

我不想在更改过滤器时选择第一个项目,您首先要创建一个私有Task对象(和/或一个实现INotifyPropertyChanged的SelectedTask属性)。

在列表框的SelectionChanged事件中,将SelectedTask设置为当前选定的任务。

然后,应用您的过滤器后,将SelectedItem属性绑定到SelectedTask。

4

设置您的ListBox IsSynchronizedWithCurrentItem =“False”。

相关问题