2013-01-07 20 views
8

Tôi khá mới với mvvm và ánh sáng mvvm, nhưng tôi nghĩ rằng tôi hiểu ý tưởng chung của nó. Những gì tôi không hiểu là nếu tôi muốn mở một cửa sổ mới, nhưng cửa sổ đó cần dữ liệu từ người gọi thực hành tốt nhất để đưa dữ liệu đó đến cửa sổ mới là gì? Nếu tôi chuyển dữ liệu cho hàm tạo thì điều đó có nghĩa là tôi cần mã trong đoạn mã phía sau để chuyển nó tới mô hình khung nhìn. Tôi không thể sử dụng tin nhắn, bởi vì nó không phải là dữ liệu cơ bản. Cảm ơn trước.Thực tiễn tốt nhất để mở một cửa sổ mới trong ánh sáng MVVM với thông số

+0

Xin lỗi để hồi sinh này từ quá khứ xa xưa, nhưng những gì bạn có nghĩa là bởi "Tôi không thể sử dụng tin nhắn, bởi vì nó không phải là cơ bản dữ liệu." ? Tôi hỏi điều này vì tôi đang học MVVM và nếu tôi ở trong tình huống của bạn, tôi sẽ sử dụng Nhắn tin. – lightxx

+0

Tôi xin lỗi đã quá lâu để tôi nhớ –

Trả lời

6

Một lựa chọn phổ biến là sử dụng một lớp dịch vụ sẽ tạo chế độ xem/chế độ xem và hiển thị chế độ xem mới. Phương thức khởi tạo mô hình khung nhìn của bạn và/hoặc phương thức/thuộc tính có thể nhận dữ liệu từ người gọi và sau đó khung nhìn sẽ bị ràng buộc với viewmodel trước khi hiển thị nó trên màn hình.

đây là một thực hiện rất rất đơn giản của một DialogService:

public class DialogService : IDisposable 
{ 
    #region Member Variables 
    private static volatile DialogService instance; 
    private static object syncroot = new object(); 
    #endregion 

    #region Ctr 
    private DialogService() 
    { 

    } 
    #endregion 

    #region Public Methods 
    public void ShowDialog(object _callerContentOne, object _callerContentTwo) 
    { 
     MyDialogViewModel viewmodel = new MyDialogViewModel(_callerContentOne, _callerContentTwo); 
     MyDialogView view = new MyDialogView(); 
     view.DataContext = viewmodel; 

     view.ShowDialog(); 
    } 
    #endregion 

    #region Private Methods 

    #endregion 

    #region Properties 
    public DialogService Instance 
    { 
     get 
     { 
      if (instance == null) 
      { 
       lock (syncroot) 
       { 
        if (instance == null) 
        { 
         instance = new DialogService(); 
        } 
       } 
      } 
      return instance; 
     } 
    } 
    #endregion 
} 
+0

bạn vui lòng cho tôi xem một ví dụ cơ bản? Tôi không chắc tôi sẽ theo bạn hoàn toàn. –

+0

http://blog.roboblob.com/2010/01/19/modal-dialogs-with-mvvm-and-silverlight-4/ – geedubb

+0

geedubb chỉ hoạt động với Silverlight. Tôi đang xây dựng một ứng dụng wpf trên studio hình ảnh 2010. –

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