在Viewmodel中手动运行特定方法

时间:2016-12-02 18:12:18

标签: c# wpf mvvm

我看了一下如何手动触发Viewmodel再次运行,但不确定它们是针对我真正想要的。

我想要做的是能够在关闭特定Window时运行Viewmodel内部的特定方法,而不运行所有这些方法。有没有办法可以将此方法绑定到第二个窗口的Closed事件?感谢。

2 个答案:

答案 0 :(得分:1)

如果你想坚持MVVM并正确地做到这一点,你可以通过易于扩展和维护的方式做到这一点:

public class FirstViewModel : IWindowCloseNotifier {

   public SecondViewModel SecondVm { get; set; }

    public FirstViewModel() 
    {
      SecondVm = new SecondViewModel(this);  
    }

    public void Close(IWindowCloseNotifierArgs args)
    {
       // Window is now closed!
    }
}

界面可确保SecondViewModel只能使用Close方法。

 public interface IWindowCloseNotifier {
        void Close(IWindowClosedArgs args);
    }

    public class SecondViewModel {

        private readonly IWindowCloseNotifier _windowCloseNotifier;

        public SecondViewModel(IWindowCloseNotifier windowCloseNotifier) {
          _windowCloseNotifier = windowCloseNotifier;
        }

        public void OnClose()
        {
           _windowCloser.Close(your args);
        }
    }

如果您的SecondViewModel不是FirstViewModel的孩子,请使用发布订阅模式在视图模型之间进行通信。

我的命名不是很好,但我没有其他任何想法。

答案 1 :(得分:0)

您使用的是MVVM Light还是其他任何MVVM框架?

如果是这样的话:您有多种选择,具体取决于您可能想要选择的设计

  1. EventToCommand
  2. Messenger(如果我沿着这条路线创建一个行为并保持逻辑,那么它的清洁)