我是WPF,MVVM的新手。现在,我一直在调查MVVM Light。我有些困惑。我感谢各位的帮助。提前感谢您看一下这篇文章。
我们是否可以绝对删除View后面的代码(例如:在.xaml内部调用InitializeComponent() - >在某些简单的情况下不再需要view.xaml.cs。)
< / LI>我的项目有很多见解,需要多少定位器? 我打算为每个视图制作单独的定位器。我想知道如果我在app.xml中注册所有定位器,是否在用户运行应用程序后立即初始化并注册了所有视图?如果是,那是否对表现不利?
主要问题: 我有一个场景: 我有很多形式:例如:
假设:我确实完成了与绑定相关的所有内容(例如按钮导入 - &gt; RelayCommand(OnImport)) 对我来说,实施此方案的最佳做法是什么? 1.只需实现init并显示ImportForm,如下所示:
public void OnImport()
{
ImportForm importForm = new ImportForm();
importForm.ShowDialog();
}
这很简单,但我想知道这种方式是否遵循MVVM的范式?
所以,我做了一些研究,并采取了另一种方式:
public void OnImport() { ////只需发送消息 Messenger.Default.Send( new NotificationMessage(this,“OnImport”)); }
在Code Behind中: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();
}
}
});
}
通过这种方式,我必须在代码后面编写一些代码 - &gt;这是一个问题吗?
以上两种解决方案都可以正确完成上述方案,但我觉得哪一个更好或者是否有正确的解决方案?
再次感谢您对长期问题的耐心。
答案 0 :(得分:1)
InitializeComponent()
在屏幕上绘制UI。 MVVM的目的是分离与View无关的逻辑并将其存储在ViewModel中。它不倾向于或旨在删除代码隐藏。Click
事件,因为它与View相关。它与任何逻辑无关,因此将其保留在代码背后对我来说是最好的解决方案。 (b)顺便说一句,如果单击按钮执行某些操作,例如,连接到数据库,则在条件为真时显示对话框。在这种情况下,我会使用Messenger来保持View和ViewModel彼此分离。