Câu hỏi chung của tôi là trạng thái tiêu đề, tốt nhất là tải dữ liệu trong khi xây dựng ViewModel hay sau đó thông qua một số xử lý sự kiện được tải?Tải dữ liệu MVVM trong hoặc sau khi xây dựng ViewModel?
Tôi đoán câu trả lời là sau khi xây dựng thông qua một số xử lý sự kiện được tải, nhưng tôi tự hỏi làm thế nào được phối hợp rõ ràng nhất giữa ViewModel và Chế độ xem?
Dưới đây là chi tiết hơn về tình hình của tôi và các vấn đề cụ thể tôi đang cố gắng để giải quyết:
Tôi đang sử dụng khuôn khổ MVVM ánh sáng cũng như Unity cho DI. Tôi có một số khung nhìn lồng nhau, mỗi khung được gắn với một ViewModel tương ứng. ViewModels liên kết với mỗi DataContext kiểm soát gốc của View thông qua ý tưởng ViewModelLocator mà Laurent Bugnion đã đưa vào MVVM Light. Điều này cho phép tìm kiếm ViewModels thông qua một tài nguyên tĩnh và để kiểm soát tuổi thọ của ViewModels thông qua một khuôn khổ Dependency Injection, trong trường hợp này là Unity. Nó cũng cho phép Expression Blend xem mọi thứ liên quan đến ViewModels và cách liên kết chúng.
Vì vậy, dù sao đi chăng nữa, tôi cũng có Chế độ xem chính có Chế độ xem dữ liệu ComboBox cho ObservableCollection trong ViewModel của nó. ComboIt's SelectedItem cũng bị ràng buộc (hai chiều) đến một thuộc tính trên ViewModel. Khi việc lựa chọn các ComboBox thay đổi, điều này là để kích hoạt các bản cập nhật trong các khung nhìn và các bản xem trước khác. Hiện tại tôi đang thực hiện điều này thông qua hệ thống Nhắn tin được tìm thấy trong MVVM Light. Đây là tất cả làm việc tuyệt vời và như mong đợi khi bạn chọn các mục khác nhau trong ComboBox.
Tuy nhiên, ViewModel đang nhận dữ liệu trong suốt thời gian xây dựng thông qua một loạt các cuộc gọi phương thức khởi tạo. Điều này dường như chỉ là một vấn đề nếu tôi muốn kiểm soát những gì SelectedItem ban đầu của ComboBox là. Sử dụng hệ thống nhắn tin của MVVM Light, tôi hiện đã thiết lập nơi thiết lập thuộc tính SelectedItem của ViewModel là bản phát sóng bản cập nhật và ViewModels quan tâm khác đăng ký thông báo trong các nhà xây dựng của họ. Có vẻ như tôi hiện đang cố gắng thiết lập SelectedItem thông qua ViewModel tại thời điểm xây dựng, điều này đã không cho phép các ViewModels phụ được xây dựng và đăng ký.
Cách nào là cách sạch nhất để phối hợp tải dữ liệu và cài đặt ban đầu của SelectedItem trong ViewModel? Tôi thực sự muốn gắn bó với việc đặt ít tiền trong mã của View như là hợp lý. Tôi nghĩ rằng tôi chỉ cần một cách để ViewModel biết khi nào công cụ đã được tải và sau đó nó có thể tiếp tục tải dữ liệu và hoàn tất giai đoạn thiết lập.
Cảm ơn bạn đã trả lời trước.
Bạn không thể gọi sự kiện được tải lên một phương thức trên chế độ xem? – Klinger
Vâng, tôi cho là có thể. Tôi có lẽ đang nghĩ về nó. Tôi đoán do dự của tôi với đó là tôi đã có thể ràng buộc tất cả mọi thứ cho đến nay tuyên bố trong XAML. Tôi đã thiết lập DataContext và sau đó thiết lập các ràng buộc thành viên tất cả ở một nơi. Có cách nào sạch sẽ để tiếp tục điều này trong XAML với sự kiện Loaded của điều khiển bị ràng buộc với một phương thức ViewModel? Tất nhiên, tôi không nghĩ rằng ViewModel nên có thông số xử lý sự kiện theo giao diện người dùng cụ thể mặc dù một trong hai. – mkmurray