6

我正在使用 MVVM 轻型工具包开发 WPF 应用程序。我的主窗口中有一个数据网格。我创建了另一个名为“openfile”的窗口,它们的视图模型。主窗口视图模型类包含绑定到数据网格的 ObservableCollection MyList 类型的公共属性。我可以从 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;
            }
        }

提前致谢。罗希尔 K

4

3 回答 3

4

经过一番研究,我通过以下代码获得了我的 Mainviewmodel 的当前实例。

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

然后我得到了所有的方法和属性......并从另一个视图模型绑定了数据。

谢谢大家..

于 2013-02-18T11:36:59.653 回答
2

您可以创建一个可以作为“中介服务”的类,它将位于您的 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
}

希望这对你有帮助..

于 2013-02-18T18:06:42.930 回答
1

最简单的方法是将MainWindowViewModel's 实例传递给OpenFileViewModel

public class OpenFileViewModel
{
    private MainWindowViewModel _parent;

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

之后,您可以调用/访问任何公共方法/属性MainWindowViewModel

foreach (var item in _parent.myList)
{
    ...
}
于 2013-02-18T10:27:48.510 回答