2013-02-18 169 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 
} 

希望这有助于你..