Có, bạn có thể liên kết với FocusedElement. Một cái gì đó như:
<Button ...
CommandParameter="{Binding (FocusManager.FocusedElement), RelativeSource={RelativeSource AncestorType={x:Type Window}}}" />
Tùy thuộc vào phạm vi tiêu cự của bạn, bạn có thể cần phải thay đổi Cửa sổ thành phần tử khác.
Nhưng cá nhân, tôi sẽ thiết lập trình xử lý lệnh để xem tham số có rỗng không. Nếu đó là sau đó tôi lập trình có được FocusManager.FocusedElement
.
var element = parameter as DataGrid;
if (element == null)
element = FocusManager.FocusedElement as DataGrid.
Bạn cũng có thể tìm kiếm cây thị giác khi cần để lấy DataGrid được liên kết.
+1 cho phương pháp tiếp cận xaml. Nhưng đối với phần mã, nếu tôi đang theo mẫu MVVM và lệnh của tôi nằm trong ViewModel của tôi, tôi không nên truy cập các đối tượng UI của tôi từ đó. Đúng? –
@ RV1987- Nếu bạn vượt qua nó thông qua CommandParameter bạn vẫn đang truy cập vào đối tượng UI :) – CodeNaked
Cách tiếp cận Xaml không hiệu quả đối với tôi, nhưng nó có thể là vấn đề với Fluent Ribbon mà tôi sử dụng. Mã sau cách tiếp cận hoạt động, nhưng bạn phải sử dụng hàm GetFocusedElement và chuyển nó tham chiếu đến cửa sổ chính – Twelve