Ứng dụng WPF của tôi được cấu trúc bằng mẫu MVVM. ViewModels sẽ giao tiếp không đồng bộ với một máy chủ và khi dữ liệu được yêu cầu được trả về, một cuộc gọi lại trong ViewModel được kích hoạt và nó sẽ làm điều gì đó với dữ liệu này. Điều này sẽ chạy trên một chuỗi không phải là Giao diện người dùng. Đôi khi những callback này liên quan đến công việc cần được thực hiện trên luồng UI, vì vậy tôi cần Dispatcher. Đây có thể là những thứ như:Việc coi các đối tượng ViewModel có giữ được Dispatcher không?
- Thêm dữ liệu vào một ObservableCollection
- lệnh kích hoạt Prism rằng sẽ thiết lập một cái gì đó sẽ được hiển thị trong giao diện
- Tạo các đối tượng WPF của một số loại.
Tôi cố gắng tránh điều sau, nhưng hai điểm đầu tiên ở đây tôi thấy là những điều hợp lý để ViewModels thực hiện. Vì thế; sao ViewModels có giữ Dispatcher để có thể gọi các lệnh cho thread UI? Hay đây có phải là hành vi xấu? Và tại sao?
Tôi đã phải làm tương tự trong bộ điều khiển - bộ điều khiển đăng ký sự kiện Load của khung nhìn nó tạo ra, và tại điểm đó lấy một tham chiếu đến bộ điều phối của khung nhìn. Điều này đặc biệt hữu ích cho việc thực hiện các đại biểu đã được thông qua. – slugster
Thx cho đầu!Tôi đang sử dụng một container IoC và container IoC được tạo trong App.xaml.cs. Tôi giả sử điều này được chạy trong thread UI, vì vậy kế hoạch là lấy bộ điều phối hiện tại tại điểm mà thùng chứa IoC được tạo và thêm nó vào thùng chứa. Vẫn còn để xem nếu điều này là thành công. – stiank81
Hoạt động hoàn hảo. Hoặc bạn có thể chỉ cần sử dụng Dispatcher.CurrentDispatcher tại bất kỳ parh bạn biết đang được chạy bởi các chủ đề giao diện người dùng. Ví dụ: các nhà xây dựng ViewModel - nếu chúng được xây dựng trong chuỗi giao diện người dùng. – stiank81