Tak, można powiązać z FocusedElement. Coś jak:
<Button ...
CommandParameter="{Binding (FocusManager.FocusedElement), RelativeSource={RelativeSource AncestorType={x:Type Window}}}" />
W zależności od zakresu ostrości, może być konieczna zmiana Okna na inny element.
Ale osobiście skonfigurowałbym program obsługi polecenia, aby sprawdzić, czy parametr ma wartość null. Jeśli tak, to programowo otrzymam FocusManager.FocusedElement
.
var element = parameter as DataGrid;
if (element == null)
element = FocusManager.FocusedElement as DataGrid.
Można również przeszukać drzewo wizualne zgodnie z potrzebami, aby uzyskać powiązaną DataGrid.
+1 dla podejścia XAML. Ale jeśli chodzi o część kodu, jeśli podążam za wzorcem MVVM i moje polecenie znajduje się w moim ViewModelu, nie powinienem uzyskiwać dostępu do moich obiektów interfejsu użytkownika. Dobrze? –
@ RV1987- Jeśli przekazujesz go za pomocą parametru CommandParameter, nadal uzyskujesz dostęp do obiektu interfejsu użytkownika :) – CodeNaked
Podejście Xaml nie działa dla mnie, ale może być problem z Fluent Ribbon, którego używam. Kod działający za podejściem działa, ale musisz użyć funkcji GetFocusedElement i przekazać jej odniesienie do głównego okna – Twelve