2013-02-18 61 views
5

Tôi đang phát triển ứng dụng WPF bằng cách sử dụng bộ công cụ ánh sáng MVVM. Tôi có một DataGrid trong Mainwindow.I của tôi đã tạo một cửa sổ khác có tên là "openfile" và viewmodels của họ.Main Window viewmodel class chứa thuộc tính công khai của loại ObservableCollection MyList mà là ràng buộc với Datagrid.Can tôi có thể điền vào tài sản này từ ViewModel openfile và và tự động liên kết với Datagrid? hoặc tôi có thể có thể vượt qua một varaible để MainViewmodel và thực hiện cuộc gọi đến một chức năng công cộng trong MainViewmodel từ OpenfileViewmodel?Truyền giá trị giữa ViewModel trong MVVM trong WPF

Đây là cách tôi đang gọi MyPage Từ thanh Trình đơn.

private void NotificationMessageReceived(NotificationMessage msg) 
     { 
      switch (msg.Notification) 
      { 
       case Messages.MainVM_Notofication_ShowNewbWindow: 
        new NewView().ShowDialog(); 
        break; 
       case Messages.MainVM_Notofication_ShowExistingWindow: 
        new OpenExisitingView().ShowDialog(); 
        break; 

       case Messages.MainVM_Notofication_ShowotherWindow: 
        newView().ShowDialog(); 
        break; 
      } 
     } 

Cảm ơn bạn trước. Roshil K

+0

Bạn có thể cung cấp một số mã ví dụ cho các kịch bản mà bạn mô tả? Nếu MyList đã được liên kết với Datagrid, thì bất kỳ cập nhật nào trong danh sách sẽ tự động cập nhật lưới của bạn. nếu MyList là một thuộc tính công khai, và máy ảo tệp mở có tham chiếu đến máy ảo chính của bạn thì bạn sẽ có thể điền nó trực tiếp. – Dutts

+0

Làm cách nào để mở chế độ xem 'OpenFile'? –

+0

Tôi đang mở Cửa sổ OpenFile từ Thanh Menu. –

Trả lời

3

Sau một nghiên cứu nhỏ, tôi đã nhận bản hiện tại của Mainviewmodel của tôi bằng Mã sau đây.

MainViewModel mainViewModelInstaince = ServiceLocator.Current.GetInstance<MainViewModel>(); 

sau đó tôi có tất cả các phương thức và thuộc tính..và ràng buộc dữ liệu từ một chế độ xem khác.

nhờ vào tất cả ..

1

Cách đơn giản nhất là phải vượt qua dụ MainWindowViewModel 's để OpenFileViewModel:

public class OpenFileViewModel 
{ 
    private MainWindowViewModel _parent; 

    public OpenFileViewModel(MainWindowViewModel parent) 
    { 
      _parent = parent; 
    } 
} 

Sau đó bạn có thể gọi/truy cập vào bất kỳ phương pháp nào/bất động sản trong MainWindowViewModel:

foreach (var item in _parent.myList) 
{ 
    ... 
} 
1

Bạn có thể tạo ra một lớp mà có thể là "Dịch vụ Trung Gian" của bạn và nó sẽ ngồi giữa ViewModels của bạn. Bạn có thể đăng ký dịch vụ hòa giải của bạn và thêm các sự kiện mà bạn có thể tăng từ một máy ảo và xử lý trong một máy ảo khác. Nó có thể được như:

public class MediatorService: IMediatorService 
{ 
    public dynamic Data { get; set;} 
    public event EventHandler<YourCustomEventArgs> Callback = delegate { } 
} 

public class XYZVM(IMediatorService mediatorService) 
{ 
// set your Data here and handle Callback event here and refresh your grid. 
// you can get anything from your "YourCustomEventArgs" which you will set from ABCVM 
} 

public class ABCVM(IMediatorService mediatorService) 
{ 
// get your data here and raise callback here and handle that in XYZVM 
} 

Hy vọng điều này sẽ giúp bạn ..

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