Привязка к FocusManager.FocusedElement - PullRequest
       30

Привязка к FocusManager.FocusedElement

7 голосов
/ 21 октября 2011

У меня есть приложение с несколькими сетями данных и команда export to excel, которая получает сфокусированную сетку данных в качестве параметра команды.Можно ли привязать CommandParameter к FocusManager.FocusedElement или мне нужно установить их эксплентность?

Заранее спасибо

Ответы [ 2 ]

7 голосов
/ 21 октября 2011

Да, вы можете привязать к FocusedElement. Что-то вроде:

<Button ...
    CommandParameter="{Binding (FocusManager.FocusedElement), RelativeSource={RelativeSource AncestorType={x:Type Window}}}" />

В зависимости от области фокусировки вам может потребоваться изменить окно на другой элемент.

Но лично я бы настроил обработчик команды, чтобы увидеть, является ли параметр пустым Если это так, то я бы программно получил FocusManager.FocusedElement.

var element = parameter as DataGrid;
if (element == null)
    element = FocusManager.FocusedElement as DataGrid.

Вы также можете искать визуальное дерево по мере необходимости, чтобы получить связанную DataGrid.

1 голос
/ 21 октября 2011

Почему вы не можете иметь свойство CLR на вашей ViewModel, скажем "SelectedDataGrid", которое вы обновляете всякий раз, когда любой из ваших DataGrid получает Focus.Просто используйте это свойство в своем коде, вместо того, чтобы передавать его из своего представления.

...