Как исправить выбранный элемент в элементе управления коллекцией на пользовательском элементе управления (используя реализацию MVVM) в WPF - PullRequest
1 голос
/ 14 января 2010

Я надеюсь, что кто-то может мне помочь ...

Джош Смит сделал отличную статью на тему «Приложения WPF с View-Model-View Model-View», и в его статью был включен пример кода .

Если вы загрузите образец кода, запустите приложение и просмотрите всех клиентов, затем выберите компанию (например, 4-ую компанию), затем нажмите «Создать нового клиента» (откроется вкладка нового клиента), а затем нажмите Вернитесь на вкладку «Все клиенты», а затем с помощью клавиатуры попробуйте переместить выбранный элемент вверх на один элемент непосредственно над текущим выбранным элементом, это не так! Вместо этого селектор снова начинается сверху.

Я не уверен, почему это происходит, но я хочу, чтобы при нажатии вверх он поднимался на один пункт вверх, а не начинался с верхней части списка. Я подозреваю, что это связано с FocusManager, но я не уверен.

Кто-нибудь знает, почему управление ведет себя таким образом? Возможно ли это, и какой подход я должен использовать, чтобы изменить этот код и заставить его не «сбрасывать» выбранный элемент?

Я реализовал проект, основанный на этом шаблоне, и по функциональным соображениям мне нужно заставить клавиатуру перемещать селектор вверх и вниз без его сброса.

1 Ответ

1 голос
/ 06 февраля 2010

в приведенном вами примере настройка свойства IsSelected не влияет на логический фокус, поэтому фокус устанавливается по умолчанию. Обходной путь, который я имею в виду в настоящее время, состоит в том, чтобы заставить фокус для элемента в codebehind. В качестве примера добавьте обработчик в selectionbreak списка просмотра следующим образом:

  private void ListView_SelectionChanged(object sender, SelectionChangedEventArgs e)
  {
    if (e.AddedItems.Count == 0 || e.RemovedItems.Count > 0) return;
    var item = (CustomerViewModel) e.AddedItems[0];
    var container = (UIElement) listView1.ItemContainerGenerator.ContainerFromItem(item);
    container.Focus();
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...