Tôi muốn lấy giá trị của thuộc tính lồng nhau của một đối tượng (giống như Person.FullName.FirstName). Tôi thấy rằng trong. Net có một lớp có tên là PropertyPath, mà WPF sử dụng cho một mục đích tương tự trong Binding. Có cách nào để tái sử dụng cơ chế của WPF hay không hoặc tôi có nên tự viết một mình hay không.Có cách nào để có được một giá trị tài sản của một đối tượng sử dụng lớp PropertyPath không?
Trả lời
Sử dụng lại PropertyPath là hấp dẫn vì nó hỗ trợ truyền tải các thuộc tính lồng nhau khi bạn chỉ ra và lập chỉ mục. Bạn có thể tự viết chức năng tương tự, tôi có bản thân mình trong quá khứ nhưng nó liên quan đến phân tích cú pháp văn bản bán phức tạp và rất nhiều công việc phản chiếu.
Như Andrew đã chỉ ra rằng bạn có thể đơn giản sử dụng lại PropertyPath từ WPF. Tôi giả sử bạn chỉ muốn đánh giá con đường đó chống lại một đối tượng mà bạn có trong trường hợp mã là một chút tham gia. Để đánh giá PropertyPath, nó phải được sử dụng trong một ràng buộc chống lại DependencyObject. Để chứng minh điều này, tôi vừa tạo một DependencyObject đơn giản gọi là BindingEvaluator có một DependencyProperty duy nhất. Ma thuật thực sự sau đó xảy ra bằng cách gọi BindingOperations.SetBinding áp dụng ràng buộc để chúng ta có thể đọc giá trị được đánh giá.
var path = new PropertyPath("FullName.FirstName");
var binding = new Binding();
binding.Source = new Person { FullName = new FullName { FirstName = "David"}}; // Just an example object similar to your question
binding.Path = path;
binding.Mode = BindingMode.TwoWay;
var evaluator = new BindingEvaluator();
BindingOperations.SetBinding(evaluator, BindingEvaluator.TargetProperty, binding);
var value = evaluator.Target;
// value will now be set to "David"
public class BindingEvaluator : DependencyObject
{
public static readonly DependencyProperty TargetProperty =
DependencyProperty.Register(
"Target",
typeof (object),
typeof (BindingEvaluator));
public object Target
{
get { return GetValue(TargetProperty); }
set { SetValue(TargetProperty, value); }
}
}
Nếu bạn muốn mở rộng điều này, bạn có thể kết nối các sự kiện PropertyChanged để hỗ trợ giá trị đọc thay đổi. Tôi hi vọng cái này giúp được!
Tôi không thấy lý do nào khiến bạn không thể sử dụng lại.
Xem PropertyPath
:
Thực hiện một cấu trúc dữ liệu cho mô tả một tài sản như một con đường bên dưới tài sản khác, hoặc dưới một sở hữu loại. Đường dẫn thuộc tính được sử dụng trong dữ liệu ràng buộc với các đối tượng và trong bảng phân cảnh và mốc thời gian cho hoạt ảnh.
- 1. Nhận giá trị tài sản từ một đối tượng khác bằng cách sử dụng Reflection.Emit
- 2. C# danh sách generics của các đối tượng được sử dụng như một tài sản - không thể thêm giá trị
- 3. Làm thế nào để có được một giá trị tài sản sử dụng phản ánh
- 4. Giá trị tài sản của đối tượng String trong JavaScript
- 5. Đặt giá trị tài sản tên sử dụng tài sản
- 6. Tôi có nên sử dụng một lĩnh vực hoặc tài sản trong lớp để thiết lập giá trị
- 7. Tôi có thể biết một tài sản có bị bẩn bằng cách sử dụng nhibernate không?
- 8. liên kết với một tài sản của một đối tượng
- 9. Làm thế nào để có được giá trị của tài sản thừa kế bằng cách sử dụng sự phản ánh?
- 10. Laravel: Auth :: user() -> id cố gắng để có được một tài sản của một đối tượng không
- 11. Làm thế nào để có được tên của một tài sản lớp học?
- 12. VBA Class() đối tượng là tài sản của lớp khác
- 13. Làm thế nào để có được giá trị của một trường tĩnh riêng từ một lớp?
- 14. Làm cách nào để lấy giá trị của một thành viên đối tượng có đường ống?
- 15. Có cách nào đơn giản để có được kích thước của một đối tượng java không?
- 16. Sử dụng phản ánh để có được giá trị của thuộc tính có tên trong một trường hợp lớp
- 17. Làm cách nào để lấy chỉ mục của một đối tượng trong một NSArray sử dụng giá trị chuỗi?
- 18. Làm cách nào để nhận giá trị thuộc tính từ đối tượng ApplicationContext? (Không sử dụng một chú thích)
- 19. Trích xuất từng giá trị của một tài sản duy nhất từ một mảng các đối tượng trong jQuery
- 20. Làm thế nào tôi có thể sử dụng Reflection để có được giá trị của một tài sản tĩnh của một loại mà không có một trường hợp cụ thể
- 21. Làm cách nào để xem một lớp học có tài sản hay không?
- 22. hoa nhài - thử nghiệm cho một tài sản không xác định của một đối tượng
- 23. Làm thế nào để có được giá trị được ánh xạ SingularAttribute của một đối tượng liên tục?
- 24. cho đối tượng lớp một giá trị C#
- 25. Cách Rubyish nhất để có được một mảng chứa giá trị cụ thể từ một mảng các đối tượng?
- 26. Có thể xác định giá trị tài sản là tài sản trong kiến không?
- 27. Nhận giá trị tài sản từ C# đối tượng năng động của chuỗi
- 28. Sử dụng một hành động tùy chỉnh WiX để thiết lập giá trị của một tài sản
- 29. Có cách nào để biết một đối tượng có thực hiện ToString một cách rõ ràng trong C#
- 30. Có sử dụng một đối tượng instantiation như là một giá trị thực hành tốt của enum entry?
Bạn sẽ viết lại cho tài sản đó bằng cách nào? –
Tôi vừa cập nhật mẫu mã để bao gồm Cập nhật mục tiêu. Bạn chỉ cần đảm bảo Binding là TwoWay và cung cấp một setter. –