从wpf中的另一个窗口获取字段值(MVVM)

问题描述 投票:0回答:1

我想将我用C# winform开发的软件基于MVVM模式移植到WPF。我才刚刚开始,还有很多问题需要解决。

其中之一是从其他窗口检索数据。

在 Winform 中我使用了下面的代码,效果很好。

这是主要形式:

public partial class MainForm : Form
    {
        public MainForm()
        {
            InitializeComponent();
        }

        string userName = string.Empty;
        string userSurName = string.Empty;
        string userAddress = string.Empty;
        private void GetUserInfos()
        {
            using (var form = new UserInfosForm())
            {
                var dialog = form.ShowDialog();
                if (dialog == DialogResult.OK)
                {
                    this.userName = form.userName;
                    this.userSurName = form.userSurName;
                    this.userAddress = form.userAddress;
                }
            }
        }
    }

这是我想从中检索数据的表单:

public partial class UserInfosForm : Form
    {
        public string userName = string.Empty;
        public string userSurName = string.Empty;
        public string userAddress = string.Empty;

        public UserInfosForm()
        {
            InitializeComponent();
            buttonOk.DialogResult = DialogResult.OK;
            buttonOk.Click += ButtonOk_Click;
        }

        private void ButtonOk_Click(object sender, EventArgs e)
        {
            userName = textBoxName.Text;
            userSurName = textBoxSurName.Text;
            userAddress = textBoxAddress.Text;
        }
    }

如何在 WPF MVVM 模式中实现该功能?

c# wpf window field
1个回答
0
投票

一般来说,在 WPF 和 MVVM 中,您可以通过 ViewModel 来完成此操作。

假设您有

MainWindow
MainWindowViewModel

在主窗口上,您有一个

Button
,该 Command 属性绑定到
OpenNewWindowCommand
上的
MainWindowViewModel

命令所做的就是显示新窗口,您可以在其中输入一些数据,例如提到的用户名等。

要显示新窗口并从该新窗口检索数据,您可以使用此代码片段

var view = new NewWindow();
var vm = new NewWindowVM();
view.DataContext = vm;

if (view.ShowDialog().GetValueOrDefault(false))
{
    this.UserName = vm.UserName;
}
view.Close();
© www.soinside.com 2019 - 2024. All rights reserved.