2012-06-21 30 views
19

Ai đó có thể giải thích cách Chế độ xem và ViewModel được kết nối không? Tôi không thể tìm thấy bất cứ nơi nào xaml hoặc xaml.cs cho View tham chiếu ViewModel, cũng như bất kỳ thứ gì trong tệp ViewModel.cs tham chiếu đến View, nhưng chúng được kết nối bằng cách nào đó và các thành viên ràng buộc từ ViewModel đến View .Chế độ xem sẽ biết ViewModel sẽ sử dụng trong WPF như thế nào?

Ngoài ra, trong hàm tạo của mỗi, chỉ có InitializeComponent cho khung nhìn và một hàm tạo cơ bản cho ViewModel (không có khai báo/định nghĩa của dạng xem).

Cảm ơn!

+0

Vì không rõ liệu bạn có đang sử dụng khung MVVM của bên thứ ba hay không, tôi nghi ngờ bạn cần phải đăng một số mã để có câu trả lời chính xác. Bạn * có thể * kết nối chế độ xem và chế độ xem trong bất kỳ hàng tá cách khác nhau và chúng tôi không thể thấy mã bạn có trước mặt bạn. –

+0

Tôi khuyên bạn nên quay lại những điều cơ bản - Tôi đã viết một loạt bài về MVVM thực sự đề cập đến một số nền tảng, như "mô hình xem" và "quan điểm là gì" và cách chúng kết nối với nhau. Nó có thể có giá trị lướt: http: // reedcopsey.com/series/windows-forms-to-mvvm/ –

Trả lời

27

Có nhiều tùy chọn khác nhau tại đây.

Điều gì đó phải đặt Chế độ xem DataContext của Chế độ xem thành phiên bản của Chế độ xem. Có rất nhiều tùy chọn ở đây:

  • Điều này có thể được thực hiện trực tiếp trong xaml (Chế độ xem chỉ hiển thị trực tiếp ViewModel).
  • này có thể được thực hiện trong constructor của View (this.DataContext = new MyViewModel();)
  • này có thể được xử lý thông qua một DataTemplate
  • A "phối hợp" class có thể dây này lại với nhau (ví dụ: một lớp "người dẫn chương trình" riêng biệt có thể xây dựng cả hai và thiết lập các DataContext một cách thích hợp)

phổ biến nhất là một trong hai có Xem định nghĩa máy ảo trong XAML (xem đầu tiên), hoặc có tất cả mọi thứ dựa theo quan điểm ViewModel tập trung xem, và có WPF tự động tạo View dựa trên VM bị ràng buộc (ViewModel-first).

Cách tiếp cận cũ là những gì được sử dụng bởi rất nhiều bộ công cụ, chẳng hạn như MVVM Light. Cách tiếp cận thứ hai là những gì tôi sử dụng trong MVVM blog series của tôi, và được sử dụng bởi một số bộ công cụ khác.

+0

+1. Lớp "phối hợp" này thường được gọi là 'Controller' (MVC-pattern) hoặc' Presenter' (MVP-pattern), nơi mà người trình bày đóng vai trò là bộ điều khiển và dạng xem cùng một lúc. Đi theo hướng MVP có nghĩa là 'ViewModel' sẽ mở ra khung nhìn. –

+0

@ OlivierJacot-Descombes trừ khi bạn sử dụng các mẫu dữ liệu - theo cách đó VM cần mở các khung nhìn. –

+0

@DannyVarod Nếu bạn đang sử dụng mẫu dữ liệu, WPF có hiệu quả sẽ trở thành "Người trình bày" trong điều khoản MVP phối hợp điều này cho bạn. –

1

Chế độ xem có chứa đối tượng của lớp mô hình chế độ xem trong xaml.

Hàm InitializeComponent tạo tất cả các điều khiển trên trang, đặt kiểu, v.v.

+0

Nó sẽ ở đâu? Tôi không thể tìm thấy bất kỳ văn bản có chứa từ "ViewModel" (Đó là những gì mô hình xem của tôi được gọi). –

+0

Bạn có thể muốn xem phản ứng của Reed. Cách tôi làm điều đó là có một đối tượng của viewmodel của tôi trong xaml của View. – Justin

4

A "sạch" cách để kết nối các quan điểm đến xem mô hình sẽ là ...

Khi bạn tạo các quan điểm cho mỗi lượt xem, thiết lập DataSource của nó để xem mô hình của nó:

Ví dụ

public class App 
{ 
    private void OnAppStart() 
    { 
     var model = new MainModel(); 
     var vm = new MainVM(); 
     var view = new MainWindow(); 

     vm.Model = model; 
     view.DataSource = vm; 

     view.Show(); 
    } 
} 

Khi mô hình bạn đang xem những thay đổi, cập nhật VM:

public class MainVM 
{ 
    private void OnSelectedModelItemChanged() 
    { 
     this.SelectedItem = new ItemVM(); 
     this.SelectedItem.Model = this.SelectedModelItem; 
    } 
} 

Và sử dụng các mẫu dữ liệu để đưa quan điểm chọn chế độ xem sub chính xác cho mỗi máy ảo.

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