2011-03-08 5 views
2

My ListBoxはCollectionViewソースにバインドされています。私がフィルタを変更しているときは、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を設定します。

フィルタを適用した後、SelectedItemプロパティをSelectedTaskにバインドします。

4

ListBox IsSynchronizedWithCurrentItem = "False"を設定します。

関連する問題