【问题标题】:return value after window closes WPF-MVVM窗口关闭后返回值 WPF-MVVM
【发布时间】:2015-05-04 18:24:55
【问题描述】:

我有一个用户控件,它只包含一个文本框和保存按钮。我将此用户控件显示为对话框窗口。用户在文本框中输入 cmets 并单击保存按钮后,我将关闭对话框窗口。

我成功了。我的问题是我想将文本框值传递给主窗口。我怎么能通过这个?这是我的代码

//显示窗口

 var window = new RadWindow
           {
              Owner = Application.Current.MainWindow,
              WindowStartupLocation = WindowStartupLocation.CenterOwner
           };          
        window.Content = control;
        window.SizeToContent = true;
        window.Header = header;  
        window.ShowDialog()

使用 ICommand 关闭 ViewModel 中的窗口

private void SaveCommentExecute()
    {
        var window = Application.Current.Windows.OfType<Window>().SingleOrDefault(x => x.IsActive);
        if (window != null)
        {
            window.Close();
        }
        // get comments and pass back to main window
    }

【问题讨论】:

  • 有多种方法可以做到这一点,互联网上有大量关于这个主题的资源。您的案例有何特别之处??
  • @walther 我还没有看到用户控制的例子
  • 提示:如果你对 MVVM 很认真,你需要一个对话服务。然后模型使用该服务来创建对话框并从显示它时捕获返回代码。

标签: c# wpf mvvm


【解决方案1】:

只需通过控件上的属性公开值:

public string TheValue
{
    get { return theTextBox.Text; }
}

并从显示对话框的位置阅读:

window.ShowDialog();
string value = control.TheValue;

(不确定您为什么将问题标记为“MVVM”,因为您发布的代码似乎不遵循 MVVM 模式)

【讨论】:

    【解决方案2】:

    您正在使用ShowDialog,但它没有任何出色的功能...

    在显示对话框的类中:

    if (window.ShowDialog() && window.DialogResult.Value == true)
    {
        //Access the properties on the window that hold your data.
    }
    

    然后在对话框中:

    if (window != null)
    {
        this.DialogResult = true;
        //Set the properties to the data you want to pass back.
        window.Close();
    }
    

    【讨论】:

    • 我必须在哪个视图模型中执行此操作?
    • 这适用于 Windows 窗体,而不是 WPF。而且它没有回答 OP 的问题。
    • @ThomasLevesque 我为 WPF 修改了它,但在不知道需要保存 什么 数据的情况下,我不建议将属性添加到对话框中。也许OP可以创建一个返回VM的DataContext的属性...
    • @Chatra 你的视图模型在哪里。您的帖子中没有显示任何内容。
    猜你喜欢
    • 1970-01-01
    • 2017-11-24
    • 2020-09-04
    • 2016-09-04
    • 2015-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多