一:父子弹窗间页面传值以及命令处理
在处理父页面弹窗子页面之后,子页面下发命令给父页面,然后父页面执行之后返回值给子页面,进行子页面响应
父页面代码
Window Window = null;
LoggingFileServerLogDialogViewModel serverlog = new LoggingFileServerLogDialogViewModel();//子页面实体类写在外面,方便进行操作子页面ViewModel
private void LogFileServerLogsDialog() {
serverlog.AcceptAppendParameter += new EventHandler(GetDialogAppendParameter);
serverlog.AcceptDeleteParameter += new EventHandler(GetDialogDeleteParameter);
serverlog.AcceptRefreshParameter += new EventHandler(GetDialogRefreshParameter);
LoggingFileServerLogDialog dialog = new LoggingFileServerLogDialog(serverlog);//委托回调
dialog.Accept += new System.EventHandler(Win_accept);
Window = new Window();
Window.Title = "ServerLogs";
Window.Width = 500;
Window.Height = 500;
Window.Content = dialog;
Window.ShowDialog();
}
private void Win_accept(object sender, System.EventArgs e)
{
if (sender.ToString() == "ServerLogs")//子页面关闭触发机制
{
serverlog.AcceptAppendParameter -= new EventHandler(GetDialogAppendParameter);//因为子页面ViewModel是全局的。所以每次关闭时候需要注销事件。
serverlog.AcceptDeleteParameter -= new EventHandler(GetDialogDeleteParameter);
serverlog.AcceptRefreshParameter -= new EventHandler(GetDialogRefreshParameter);
Window.Close();
}
}
子页面代码xaml:
/// <summary>
/// the recipe name to other window
/// </summary>
public event EventHandler Accept;
private void Cancel_Click(object sender, RoutedEventArgs e)
{//子页面关闭按钮触发关闭
Accept("ServerLogs", EventArgs.Empty);
}
子页面ViewModel处理:
/// <summary>
/// EventHandler
/// </summary>
public event EventHandler AcceptAppendParameter;
/// <summary>
/// EventHandler
/// </summary>
public event EventHandler AcceptDeleteParameter;
/// <summary>
/// EventHandler
/// </summary>
public event EventHandler AcceptRefreshParameter;
/// <summary>
/// Add server files
/// </summary>
private void ExecutionAppend()
{
AcceptAppendParameter(SelectedServerFile.Name, EventArgs.Empty);//子页面执行对应命令下发时进行委托处理,传递给父页面。
}