【发布时间】:2012-12-06 07:07:06
【问题描述】:
我是 WPF 和 MVVM 的新手。现在,我一直在研究 MVVM Light。我有些困惑。我感谢你们所有人的帮助。提前感谢您查看这篇文章。
-
我们是否可以完全删除 View 后面的代码(例如:在 .xaml 中的某处调用 InitializeComponent() --> 在某些简单情况下不再需要 view.xaml.cs)。
李> 我的项目有很多视图,需要多少定位器? 我打算为每个视图制作单独的定位器。而且我想知道如果我在 app.xml 中注册所有定位器,是否所有视图都在用户运行应用程序后立即初始化和注册?如果是,是否对性能不利?
-
主要问题: 我有一个场景: 我有很多种形式:比如:
- MainForm:这是应用程序调用的第一个表单。
- ImportForm:当用户单击 Import(从 MainForm)时调用
假设:我确实完成了与绑定相关的所有内容(例如按钮 Import --> RelayCommand(OnImport)) 我实施此方案的最佳做法是什么? 1. 只需执行初始化并显示 ImportForm 如下所示:
public void OnImport()
{
ImportForm importForm = new ImportForm();
importForm.ShowDialog();
}
很简单,但是我想知道这种方式是否遵循 MVVM 的范式?
-
所以,我做了一些研究并采取了另一种方式,例如:
公共无效 OnImport() { //// 只发送消息 Messenger.Default.Send( 新的 NotificationMessage(this, "OnImport")); }
在代码后面:MainForm.xaml.cs
public MainForm()
{
InitializeComponent();
Messenger.Default.Register<NotificationMessage>(this, (nm) =>
{
if (nm.Sender == this.DataContext)
{
if (nm.Notification == "OnImport")
{
ImportForm importForm = new ImportForm();
importForm.ShowDialog();
}
}
});
}
这样一来,我必须在后面的代码里面写一些代码 --> 有问题吗?
上述两种解决方案都可以正确完成上述场景,但我混淆了哪一种更好,或者那里有任何真正正确的解决方案?
再次感谢您耐心解答这个冗长的问题。
【问题讨论】:
标签: wpf mvvm mvvm-light