这answer从这个question约2个窗事件可能帮助:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
this.Loaded += new RoutedEventHandler(MainWindow_Loaded);
}
void MainWindow_Loaded(object sender, RoutedEventArgs e)
{
Child childWindow = new Child();
childWindow.MyEvent += new EventHandler(childWindow_MyEvent);
childWindow.ShowDialog();
}
void childWindow_MyEvent(object sender, EventArgs e)
{
// handle event
MessageBox.Show("Handle");
}
}
子窗口
public partial class Child : Window
{
// define event
public event EventHandler MyEvent;
protected void OnMyEvent()
{
if (this.MyEvent != null)
this.MyEvent(this, EventArgs.Empty);
}
public Child()
{
InitializeComponent();
this.Loaded += new RoutedEventHandler(Child_Loaded);
}
void Child_Loaded(object sender, RoutedEventArgs e)
{
// call event
this.OnMyEvent();
}
}
上面的代码显示了如何从一个窗口中设置一个事件到另一个。但是,您可能只想在其他窗口中调用方法。对于example:
public void AddNewUser()
{
Window2 window = new Window2();
if (window.ShowDialog() == true)
{
// Update DataGrid
RefreshDataGrid();
}
}
如果你下定决心坚持的事件,那么你应该在WPF routed events阅读起来。
你提的问题是过于宽泛。你需要提供一个很好的[mcve],清楚地说明你的场景。我会指出你似乎错误地看待问题。也就是说,打印命令应该属于知道如何打印的视图模型,并且您不必导航事件系统就可以在视图模型上调用要打印的命令。 WPF中的用户界面和事件路由用于与视图进行交互,后者又与视图模型进行交互。视图本身不应该实现与用户交互直接相关的功能。 –
如何使用观察者 - 订户设计模式为您的情况。我认为这将是一个很好的解决方案这 –