我正在使用MVVM光工具包开发WPF应用程序。我在Mainwindow中有一个数据网格。我创建了另一个名为“openfile”的窗口,他们的viewmodels.Main Window viewmodel类包含ObservableCollection类型的公共属性,它被绑定到Datagrid.Can我能从openfile Viewmodel中填充这个属性并自动绑定到Datagrid吗?或者我可以将变量传递给MainViewmodel并从OpenfileViewmodel调用MainViewmodel中的公共函数吗?
这是我如何从菜单栏调用MyPage。
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 K
答案 0 :(得分:3)
经过一番研究后,我通过以下代码获得了Mainviewmodel的Current实例。
MainViewModel mainViewModelInstaince = ServiceLocator.Current.GetInstance<MainViewModel>();
然后我获得了所有方法和属性..并绑定了另一个视图模型中的数据。
感谢所有..
答案 1 :(得分:1)
最简单的方法是将MainWindowViewModel
的实例传递给OpenFileViewModel
:
public class OpenFileViewModel
{
private MainWindowViewModel _parent;
public OpenFileViewModel(MainWindowViewModel parent)
{
_parent = parent;
}
}
之后,您可以在MainWindowViewModel
中调用/访问任何公共方法/属性:
foreach (var item in _parent.myList)
{
...
}
答案 2 :(得分:1)
您可以创建一个可以作为“中介服务”的类,它将位于您的ViewModel之间。您可以注册中介服务并添加可以从一个VM引发并在另一个VM中处理的事件。它可以像:
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
}
希望这能帮到你..