2009-09-24 35 views
10

Chúng tôi đang xây dựng một ứng dụng bằng cách sử dụng mẫu MVVM, chúng tôi có bộ điều khiển kết nối tất cả chế độ xem và chế độ xem bằng DI. Tất cả các ví dụ về MVVM tôi đã thấy thực sự đơn giản và có 1 lượt xem. Làm thế nào để/nên viewmodels nói chuyện lại với bộ điều khiển? Bộ điều khiển biết về các mô hình và khung nhìn, liệu viewmodel có gửi các sự kiện trở lại bộ điều khiển không? Trường hợp tiết kiệm sẽ xảy ra ở đâu? Mô hình? Bộ điều khiển?Bộ điều khiển trong MVVM, Cách nhận thông tin từ viewmodel đến bộ điều khiển của nó?

Trả lời

3

Chúng tôi cũng sử dụng Bộ điều khiển nhưng trong trường hợp của chúng, chúng chịu trách nhiệm về quy trình làm việc của ứng dụng. Bộ điều khiển biết ViewModel và Model nhưng không phải là View cụ thể vì nó sẽ được IoC Container tiêm vào.

Nếu bạn quan tâm đến một ví dụ cho thấy nhiều hơn chỉ là một giao diện người dùng (hộp thoại modal, thuật sĩ với công việc có điều kiện) thì bạn có thể có một cái nhìn tại địa chỉ:

WPF Application Framework (WAF) - http://waf.codeplex.com

+1

Ya chúng tôi đang làm những điều ngược lại. Bộ điều khiển của chúng tôi biết về giao diện xem và chèn mô hình và mô hình xem. – nportelli

5

ViewModel của bạn có thể không phụ thuộc vào IController hay một số giao diện khác, vì vậy họ có thể nói chuyện với nó? Tôi cố gắng giữ nhiều logic ứng dụng ra khỏi ViewModel nhất có thể, vì các lớp này có thể dễ dàng trở nên cồng kềnh.

MyViewModel(IController controller) 
{ 
    this.controller = controller; 
} 

void Save() 
{ 
    this.controller.Save(); 
} 

Tôi đồng ý rằng khung MVVM có xu hướng quá đơn giản với mẫu của họ. Đặc biệt, việc di chuyển giữa các khung nhìn/màn hình trong ứng dụng của bạn là điều tôi muốn xem thêm ví dụ về. Tôi tạo một giao diện IViewManager, để cho phép các ViewModels của tôi yêu cầu chúng ta chuyển sang một khung nhìn khác.

+1

Vâng điều khiển biết về viewmodel, chúng tôi không muốn có một sự phụ thuộc 2 chiều xảy ra hoặc các cơ hội mà một ViewModel của tôi được tái sử dụng bằng cách điều khiển khác. – nportelli

+1

Hmmmm, tôi không hoàn toàn chắc chắn rằng tôi hiểu mẫu bạn đang sử dụng. Bạn đang nói bạn có một bộ điều khiển cho mỗi lần xem? Đó không phải là MVC nhiều hơn MVVM? Có thể bạn có thể thêm một chút mã ví dụ vào câu hỏi của mình để cho biết cách bạn tạo chế độ xem và chế độ xem. –

+0

Một bộ điều khiển cho mỗi lần xem không, một bộ điều khiển cho mỗi trường hợp sử dụng. Xin lỗi nếu tôi không nói rõ. – nportelli

1

Tôi sử dụng thiết lập tương tự cho bạn. Trong bộ điều khiển của tôi, nơi mà DI và xem tiêm của tôi đi xuống, tôi đôi khi giữ tham chiếu đến ViewModel (mà giữ View). Một số trường hợp tôi có thể có một sự kiện trên máy ảo được xử lý bởi bộ điều khiển. Trong trường hợp cực đoan khác (như VM/V được tạo bên ngoài bộ điều khiển, nói trong một máy ảo khác), tôi thậm chí có thể sử dụng EventAggregator (với một ref mạnh) để nghe các sự kiện có thể được kích hoạt trên máy ảo. Trong trường hợp đó, một ref được lưu trữ cho VM là không cần thiết.

+0

Bộ điều khiển của chúng tôi không biết về VM. Chỉ cần và giao diện để xem. VM được tiêm từ đó. Ý tưởng là bộ điều khiển không biết về mẫu mà giao diện người dùng đang triển khai, vì vậy chúng tôi có thể dễ dàng trao đổi giao diện người dùng dễ dàng. Điều này dẫn đến các vấn đề của chúng tôi. – nportelli

0

Làm thế nào về việc sử dụng các sự kiện trong đó bộ điều khiển đăng ký các sự kiện VM hoặc sử dụng một mẫu trung gian hòa giải trong đó một bộ hòa giải được tiêm vào máy ảo.

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