2013-02-18 209 views
5

我使用MVVM光工具kit.I在我Ma​​inwindow.I DataGrid中創建一個名爲「OPENFILE」及其viewmodels.Main窗口視圖模型類另一個窗口包含公共財產的開發WPF應用程序視圖模型之間傳遞值類型的ObservableCollection MYLIST的這勢必給Datagrid.Can我能夠填補從OPENFILE視圖模型,並且此屬性,並自動綁定到Datagrid的?或可我能夠在varaible傳遞給MainViewmodel並撥打電話,以從OpenfileViewmodel的MainViewmodel公共職能?在MVVM在WPF

這是我如何調用我的編目從菜單欄。

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; 
      } 
     } 

在此先感謝。 Roshilķ

+0

你能夠提供你所描述的情景一些示例代碼?如果MyList已經綁定到Datagrid,那麼對列表的任何更新都會自動更新您的網格。如果MyList是公共屬性,並且打開文件VM具有對主VM的引用,那麼您應該可以直接對其進行填充。 – Dutts 2013-02-18 10:14:40

+0

如何打開'OpenFile'視圖? – 2013-02-18 10:19:20

+0

我從菜單欄打開OpenFile窗口。 – 2013-02-18 10:22:17

回答

3

後有點研究,我通過以下代碼獲得了我的Mainview模型的Current實例。

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

然後我得到了所有的方法和properties..and從另一個視圖模型綁定的DATAS。

感謝所有..

1

最簡單的方法是MainWindowViewModel的實例傳遞給OpenFileViewModel

public class OpenFileViewModel 
{ 
    private MainWindowViewModel _parent; 

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

之後,你可以調用/訪問MainWindowViewModel任何公開的方法/屬性:

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

您可以創建它可以是你的「中介服務」一類,它會將您的ViewModels之間坐。您可以註冊您的中介服務並添加您可以從一個虛擬機引發並在另一虛擬機中處理的事件。它可以像:

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 
} 

希望這有助於你..