這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中的用戶界面和事件路由用於與視圖進行交互,後者又與視圖模型進行交互。視圖本身不應該實現與用戶交互直接相關的功能。 –
如何使用觀察者 - 訂戶設計模式爲您的情況。我認爲這將是一個很好的解決方案這 –