2009-07-20 50 views
34

Tôi nghe nói điều tốt nhất tiếp theo trong việc xây dựng giao diện người dùng WPF, nhưng tất cả các ví dụ hiện có là có hàng tá dòng mã - tôi có thể tải Hello World cho MVVM không? Tôi cũng khá mới đối với mạng C# /., Vì vậy có thể chỉ cho tôi một số tài nguyên có thể trợ giúp?Một câu giải thích cho MVVM trong WPF?

Được đánh giá cao!

Trả lời

4

This site có sơ đồ tuyệt vời giải thích nó.

Về cơ bản bạn có 3 thành phần:
1) Mẫu - Mô hình dữ liệu của ứng dụng của bạn. điều này khá chuẩn và giống như bất kỳ ứng dụng MVP hoặc MVC nào.
2) Xem - XAML xác định chế độ xem/bố cục của ứng dụng của bạn.
3) Xem mẫu - Vì WPF yêu cầu khung nhìn gắn với mọi thứ theo một số cách nhất định (như yêu cầu các bộ sưu tập thực hiện INotifyCollectionChanged và các công cụ tương tự) nó thường yêu cầu bạn xoa bóp dữ liệu của mình một chút thích hợp cho chế độ xem hiển thị. Đây là nơi mô hình khung nhìn vào. Nó gói dữ liệu vào các mô hình xem mà khung nhìn có thể dễ dàng hiển thị. Đây là thứ mà XAML của bạn sẽ liên kết. Nó phải trả lời các sự kiện từ lớp mô hình và tự cập nhật.

(Sau đó, bộ điều khiển của bạn treo trên mặt ở đâu đó - lý tưởng sử dụng các lệnh WPF - và thay đổi các mô hình, mà cháy sự kiện để cập nhật các mô hình xem)

14

Một câu? Đây rồi.

MVVM là mẫu phân cách giao diện người dùng trong đó Xaml (View) liên kết với mặt tiền (Xem mô hình) cho phép sự can đảm của chương trình của bạn (Model) để tránh các mối quan tâm giao diện người dùng bị rò rỉ.

+22

1 Haha. Một nhà phát triển phần mềm cổ điển.Bạn đã cho người dùng chính xác những gì anh ta yêu cầu, nhưng hóa ra nó không có lợi cho anh ta chút nào và nó có lẽ không phải là điều anh ta thực sự muốn. (Làm cho tôi cười) = :) –

70

Một câu giải thích:

MVVM là một reimagining của mô hình cũng yêu Model-View-Presenter (MVP) được thiết kế để làm việc đặc biệt tốt với các cơ sở liên kết dữ liệu cung cấp với WPF để tách logic ứng dụng từ thiết kế giao diện người dùng.

dài hơn, hữu ích hơn, giải thích:

Khái niệm cơ bản về MVVM là giờ nghỉ ngoài một ứng dụng WPF thành các thành phần riêng biệt mỗi trong số đó có một trách nhiệm trong quá trình thu thập thông tin trên màn hình.

Trước hết, bạn có mô hình. Đây là một lớp có chức năng rất hạn chế thường được phổ biến từ một số nguồn bên ngoài như cơ sở dữ liệu hoặc dịch vụ web. Ví dụ:

public class MessageModel 
{ 
    public string Message { get; set; } 
} 

Trên hết, bạn đặt lớp ViewModel, đây là nơi logic của ứng dụng nằm, nó thông báo giao diện của các thay đổi đối với mô hình và đảm bảo tính nhất quán của dữ liệu. Bằng cách thực hiện giao diện INotifyPropertyChanged hai cách dữ liệu giữa ViewModel và khung nhìn được đưa ra miễn phí bởi WPF:

public class MessageViewModel : INotifyPropertyChanged 
{ 
    private MessageModel _model; 

    public string Message 
    { 
      get { return _model.Message; } 
      set 
      { 
       if (_model.Message != value) 
       { 
        _model.Message = value; 
        OnPropertyChanged("Message"); 
       } 
      } 
    } 
} 

Cuối cùng bạn có dạng xem.Đây là một tập tin XAML mô tả cách bố trí các nút điều khiển dùng để hiển thị và chỉnh sửa dữ liệu trong ViewModel:

<Canvas> 
    <TextBox Text={"Binding Message"} /> 
</Canvas> 

Lý do mà bạn đi đến tất cả các nỗ lực này là mô hình rất nhẹ và dễ dàng thông qua trên ranh giới miền. Nó rất đơn giản để gửi hoặc nhận nó từ một webservice hoặc ánh xạ nó vào một bảng cơ sở dữ liệu. ViewModel, mặt khác phức tạp, nhưng có ít sự phụ thuộc - nó không quan tâm đến nơi mà mô hình lấy dữ liệu của nó, chỉ có nó ở đó và nó không có khái niệm nào về một cái nhìn mà làm cho nó rất khả thi (logic của ứng dụng của bạn không dựa vào giao diện người dùng để kiểm tra). Cuối cùng, xaml được chia thành nhiều phần và có thể được trao cho một nhà thiết kế không cần biết gì về logic của ứng dụng, chỉ có ViewModel sẽ trình bày dữ liệu nhất định dưới một số tên nhất định. Sự đóng gói này làm cho nó rất dễ dàng để xác định vai trò trong các dự án lớn, hoặc đặt cùng một giao diện người dùng hạn chế để kiểm tra logic trong khi thực tế đang được đánh bóng.

+5

Câu trả lời tuyệt vời. Cảm ơn bạn đã giải thích đơn giản về những gì có thể là một chủ đề phức tạp – Kane

+0

IMO, ví dụ MVVM không có Lệnh không đủ đầy đủ –

+0

@MartinHarris bạn đã nói rằng Mô hình có từ webservice hoặc cơ sở dữ liệu? Chúng ta nên đặt mã logic đó ở đâu? Trong mô hình xem? – onmyway133

0

tôi sẽ nói điều gì đó như: "mô hình trình bày để tách riêng các mối quan tâm giữa giao diện người dùng và đó là logic"

8

Những tuyên bố đơn giản mà đã giúp tôi có được đầu của tôi xung quanh nó tốt nhất là "Tôi đơn vị có thể kiểm tra logic kinh doanh của mình mà không giao diện người dùng? " Tôi nghĩ rằng đây sẽ là câu hỏi mà bạn hỏi trong khi học và thiết kế sử dụng các khái niệm MVVM.

0

Câu trả lời được cải thiện:

MVVM là tất cả về tương lai; bạn muốn tách logic ứng dụng khỏi khung để khuôn khổ có thể phát triển và ứng dụng của bạn có thể không phải thay đổi hoặc ứng dụng của bạn có thể phát triển và bạn sẽ không phải lo lắng nhiều về việc thay đổi các khía cạnh giao diện người dùng thực tế.

Thực ra, MVVM là sự tinh chỉnh của một mẫu đã được sử dụng trong một thời gian. Tôi có thể nhớ phát triển mô hình khi tôi đang làm việc trong MFC. Có ít nhất hai lý do để làm như vậy. MFC hoặc <> là khá phức tạp, và trộn MFC xây dựng với logic ứng dụng của bạn làm cho các loại ứng dụng của giòn. Ví dụ: thay thế một hộp danh sách với một combobox (hoặc bộ chọn theo thuật ngữ hiện đại) sẽ khó khăn hơn nhiều nếu logic hỗ trợ nội dung của danh sách/bộ chọn được kết hợp với logic để tự điều chỉnh danh sách/bộ chọn.

1

một mẫu mà giao diện người dùng (chế độ xem) và chương trình phụ trợ (phương thức) giao tiếp (qua lại) sử dụng trình trung gian chung (chế độ xem).

1

Mẫu MVVM là khi giao diện người dùng giao diện với đối tượng trung gian thân thiện với xaml để lấy dữ liệu thực tế không thân thiện với xaml của bạn.

0

Một số giải thích một câu thực sự hay (hoặc gần đó). Tôi sẽ chỉ thêm vào nó bằng cách nói rằng nếu bạn đang vượt qua mức cơ bản và bạn muốn có một ví dụ về cách sử dụng MVVM trong một ứng dụng thực tế có menu, thanh công cụ, hộp thoại tùy chọn, cửa sổ công cụ docking, v.v. , hãy xem SoapBox Core và điều này demo using SoapBox Core. Nó có nguồn mở để bạn có thể nhận được rất nhiều ý tưởng.

37

MVVM là mối quan hệ giữa người hâm mộ sao. Người hâm mộ biết ngôi sao nhưng ngôi sao không biết người hâm mộ. Các fan hâm mộ yêu sao của mình rất nhiều mà nếu ngôi sao thay đổi chính mình (tôi có nghĩa là phong cách ăn mặc của mình), các fan hâm mộ thay đổi mình cho phù hợp.

Bây giờ, hãy thay thế "dấu sao" bằng "Chế độ xem" và "quạt" bằng "Chế độ xem" và đọc lại lần nữa.

+0

lời giải thích tuyệt vời .. dễ hiểu người mới bắt đầu như tôi –

0

Bởi vì bạn không thể dữ liệu ràng buộc để codebehind của riêng bạn

(chỉ nửa đùa ở đây)