2009-11-25 37 views
5

Có vẻ như những người khác đã có các biến thể về câu hỏi này, nhưng từ những gì tôi có thể nói nó chưa được giải quyết cho những người sử dụng bộ sưu tập trong một mô hình xem đơn lẻ.MVVM chọn một mục treeview lập trình

Tôi có một máy ảo có chứa một ObservableCollection đối tượng, chứ không phải máy ảo cho từng đối tượng. Vì vậy tôi không nghĩ rằng tôi có thể sử dụng bool SelectedItem mà thường được thảo luận bởi vì tôi không nghĩ rằng tôi có thể liên kết với tài sản trên các đối tượng của bộ sưu tập ... chỉ là các thuộc tính trên máy ảo.

Vì vậy, tôi đã có toàn bộ điều khá tốt bằng văn bản không có khớp nối code-behind và tối thiểu, nhưng khi một mục mới được bổ sung vào bộ sưu tập, được ràng buộc với TreeView, tôi cần phải chọn mục đó.

Ý tưởng?

Cảm ơn!

Trả lời

4

Khi nghĩ về điều này. Bạn thực sự nên xây dựng một trình bao bọc cho mọi phần tử của khung nhìn cây có bool IsSelected trên nó cũng như bool IsExpanded chúng làm cho cuộc sống dễ dàng hơn nhiều để hiển thị dữ liệu. Bạn thậm chí có thể thêm chúng vào lớp học của bạn và sử dụng chúng từ đó.

+0

Có thể như vậy. Mặc dù vậy, tôi đã chọn một con đường ở giữa. Tôi đã đi trước và triển khai thực hiện INotifyPropertyChanged trên từng loại đối tượng mà ObservableCollection của VM nắm giữ và tát IsSelected và IsExpanded trên chúng. Down side là các đối tượng của tôi bây giờ có mà goop trong họ (là thậm chí xấu?). Mặt tốt là tôi không phải tạo thêm lớp VM mà cung cấp cho tôi không có gì ngoài một nơi để giữ đối tượng bên dưới và hai thuộc tính đó. – Bob

+0

Nếu đó là tất cả những gì bạn cần, bạn cũng có thể làm theo cách đó. – Erin

4

Josh Smith có một bài viết về CodeProject nơi ông đề nghị tạo một đối tượng ViewModel để đại diện cho mỗi nút của TreeView, và sau đó autowires chúng lên khi cần thiết.

http://www.codeproject.com/KB/WPF/TreeViewWithViewModel.aspx

+0

yeah thats một bài viết hay. Đừng tránh xa tôi, nhưng tôi nghĩ rằng nó có thể là quá mức cần thiết khi tất cả những gì bạn thực sự cần làm là dây trong một vài tương tác UI (mở rộng, chọn). :) – Bob

Các vấn đề liên quan