我看了一下如何手动触发Viewmodel再次运行,但不确定它们是针对我真正想要的。
我想要做的是能够在关闭特定Window时运行Viewmodel内部的特定方法,而不运行所有这些方法。有没有办法可以将此方法绑定到第二个窗口的Closed事件?感谢。
答案 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框架?
如果是这样的话:您有多种选择,具体取决于您可能想要选择的设计