2011-03-08 3 views
2

내 ListBox는 CollectionView Source에 바인딩됩니다. 필터를 변경하면 Listox의 첫 번째 항목이 자동으로 선택됩니다.CollectionViewSource.Filter의 ListBox에서 첫 번째 항목 선택

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

정말 원하십니까?

필터를 변경할 때 첫 번째 항목을 선택하지 않으려면 먼저 개인 작업 개체 (및/또는 INotifyPropertyChanged를 구현하는 SelectedTask 속성)를 만들어야합니다.

목록 상자의 SelectionChanged 이벤트에서 SelectedTask를 현재 선택된 Task로 설정하십시오.

그런 다음 필터를 적용한 후 SelectedItem 속성을 SelectedTask에 바인딩하십시오.

4

ListBox IsSynchronizedWithCurrentItem = "False"로 설정하십시오.

관련 문제