Trong một trình xử lý sự kiện cho một lệnh cho một DataGrid, tôi nhận được DataGridCell trong ExecutedRoutedEventArgs. Tuy nhiên, tôi không thể tìm ra cách để có được DataGrid và DataGridRow liên quan của nó. Sự giúp đỡ của bạn được đánh giá rất cao.Làm thế nào để tìm chủ sở hữu của nó DataGrid và DataGridRow từ DataGridCell trong WPF?
14
A
Trả lời
12
Bạn có thể muốn để thiết lập một số loại RelativeSource
ràng buộc có thể giúp bạn có được "lưới phụ huynh/hàng" thông qua một {RelativeSource FindAncestor, AncestorType={x:Type DataGrid}}
, nhưng câu hỏi của bạn đã cho tôi suy nghĩ ...
Bạn có thể:
Sử dụng Reflection:
var gridCell = ....;
var parentRow = gridCell
.GetType()
.GetProperty("RowOwner",
BindingFlags.NonPublic | BindingFlags.Instance)
.GetValue(null) as DataGridRow;
Sử dụng VisualTreeHelper
:
var gridCell = ...;
var parent = VisualTreeHelper.GetParent(gridCell);
while(parent != null && parent.GetType() != typeof(DataGridRow))
{
parent = VisualTreeHelper.GetParent(parent);
}
0
Một cách để bạn có thể làm là bằng cách thông qua một hoặc cả hai trong những yếu tố cần thiết trong như một CommandParameter:
<MouseBinding
MouseAction="LeftDoubleClick"
Command="cmd:CustomCommands.Open"
CommandParameter="{Binding ElementName=MyDataGrid}}" />
Nếu bạn cần cả hai, bạn có thể thêm một bộ chuyển đổi đa giá trị kết hợp chúng thành một Tuple
(hoặc để lại nó như là một đối tượng [])
sau đó, trong bạn code-behind bạn có thể truy cập nó bằng cách sử dụng e.Parameter
2
đây là những gì tôi nghĩ là một câu trả lời hoàn chỉnh ...
private void Copy(object sender, ExecutedRoutedEventArgs e)
{
DataGrid grid = GetParent<DataGrid>(e.OriginalSource as DependencyObject);
DataGridRow row = GetParent<DataGridRow>(e.OriginalSource as DependencyObject);
}
private T GetParent<T>(DependencyObject d) where T:class
{
while (d != null && !(d is T))
{
d = VisualTreeHelper.GetParent(d);
}
return d as T;
}
Các vấn đề liên quan
- 1. WPF DataGrid MouseOver trên DataGridRow
- 2. Làm thế nào để trích xuất DataGridCell từ lớp DataGridCellinfo trong wpf
- 3. WPF - Cách lấy ô từ DataGridRow?
- 4. WPF Nhận chủ sở hữu UserControl
- 5. WPF DataGrid - Làm thế nào để tự động thoát khỏi Chế độ chỉnh sửa?
- 6. Tìm chủ sở hữu của một tệp trong unix
- 7. Binding động trong WPF DataGridCell Template
- 8. Làm thế nào để làm mới một DataGrid WPF?
- 9. Làm thế nào để bạn có được UserName của chủ sở hữu của một quá trình?
- 10. Làm cách nào để truy cập đối tượng dữ liệu của một DataGridCell trong mã?
- 11. chủ sở hữu của JVM là ai?
- 12. WPF DataGrid AlternatingRowBackground và RowStyle ưu tiên
- 13. Có cách nào để tìm chuỗi chủ sở hữu của kiểm soát không?
- 14. Biểu tượng của chủ sở hữu tệp
- 15. Làm thế nào để bạn thay đổi chủ sở hữu của một cơ sở dữ liệu trong sql?
- 16. Làm cách nào để lấy tên của chủ sở hữu tệp trong Java trên OSX?
- 17. Làm cách nào để biết địa chỉ của đối tượng chủ sở hữu trong C++?
- 18. Làm cách nào để thay đổi chủ sở hữu của cơ sở dữ liệu SQL Server?
- 19. Làm cách nào để xác định chủ sở hữu của một quy trình trong C#?
- 20. "Ném" làm gì và nó hữu ích như thế nào?
- 21. Thay đổi chủ sở hữu và nhóm trong c
- 22. Tìm chủ sở hữu thiết bị lặp STL
- 23. Làm thế nào để tạo ra một điều khiển nhanh chóng Datagrid WPF từ đầu?
- 24. Làm cách nào để lấy tên chủ sở hữu của tệp trong Linux bằng C++?
- 25. WPF: Làm cách nào để đặt Cửa sổ chủ sở hữu của Hộp thoại được hiển thị bởi UserControl?
- 26. Tìm chủ sở hữu và nhóm của một tệp (dưới dạng chuỗi)
- 27. Win32: Làm thế nào để có được quy trình/chủ sở hữu một mutex?
- 28. Cách đặt cửa sổ Win32 làm chủ sở hữu cửa sổ WPF?
- 29. radiobuttons ràng buộc nhóm để sở hữu một trong WPF
- 30. Chủ sở hữu của QBoxLayout có trở thành chủ sở hữu của tất cả tiện ích bố cục không?