我想将我用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 模式中实现该功能?
一般来说,在 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();