Как определить WPF SelectedItem для окна - PullRequest
1 голос
/ 18 сентября 2008

У меня есть приложение WPF с множеством элементов управления на основе списка в окне, которые связаны с различными коллекциями CollectionView.

На уровне окна есть способ получить текущий выбранный элемент для текущего элемента управления на основе списка фокусировки? Я знаю, что могу сделать это с помощью некоторого довольно тривиального кода путем поиска элемента in focus, но поддерживает ли WPF это как концепцию из коробки?

Что-то вроде Window.CurrentSelectedDataItem было бы здорово. Я пытаюсь использовать это как способ централизованного управления командами для включения отключения команд на основе текущего выбранного элемента данных.

Ответы [ 2 ]

1 голос
/ 18 сентября 2008

Я не думаю, что есть свойство, которое вы указали, но в качестве альтернативы вы можете зарегистрировать ClassHandler для события ListBox.SelectionChanged в вашем классе Window:

EventManager.RegisterClassHandler(typeof(ListBox), ListBox.SelectionChanged,
    new SelectionChangedEventHandler(this.OnListBoxSelectionChanged));

Это будет вызываться всякий раз, когда выбор изменяется в любом ListBox в вашем приложении. Вы можете использовать аргумент отправителя, чтобы определить, какой именно ListBox изменил свой выбор, и кэшировать это значение, когда вам это нужно.

0 голосов
/ 30 сентября 2008

Я не пробовал этого, но вы можете попробовать использовать MultiBinding с конвертером, чтобы получить нужный элемент:

<MultiBinding Converter="{StaticResource coalesce}">
    <MultiBinding.Bindings>
        <MultiBinding Converter="{StaticResource nullIfFalse}">
            <MultiBinding.Bindings>
                 <Binding ElementName="List1" Path="HasFocus" />
                 <Binding ElementName="List1" Path="SelectedItem" />

nullIfFalse возвращает второй параметр, если первый равен true, в противном случае - null. coalesce возвращает первый ненулевой элемент.

...