我是WPF的新手。我正在尝试创建添加/编辑表单。我还为MVVM添加了Caliburn.Micro frameowrk。
我为Edit
或Id
创建了一个屏幕。 我不知道如何将模型ViewModel
传递给我的View (Window)
。怎么样?
目前我的Add
仅适用于Edit
,而不适用于 public class OrderAddEditViewModel : Screen {
public OrderAddEditViewModel( ) {};
// I do not know if this is normal approach or not
public OrderAddEditViewModel(int orderId) { // Load Order from DB};
...
}
public partial class OrderAddEditView : Window ...
。
课程是这样的:
Main form
现在,当按下OrderAddEditView
上的按钮时,我正在打开 //This loads empty form for Add
// What if I have OrderId and want to load it, HOW?
var frm = new OrderAddEditView();
frm.Show();
OrderAddEditView
背后有一些魔力,Caliburn.Micro
知道要使用哪种视图模型(这是WPF + OrderId
)。
但是,目前我想传递" OrderAddEditViewModel
"到我的OrderAddEditView
构造函数(这将从DB加载数据)并打开var date2 = new Date("1995-12-17T03:24:00");
,以便调用带有id的构造函数。
答案 0 :(得分:1)
由于您使用的是Caliburn.Micro
,因此有一种简洁的方法可以打开您的ViewModel
。
它被称为ActivateItem
。
要使用它,只需编写以下内容即可。
ActivateItem(new YourViewModel([some attributes]));
更新2:
我差点忘了...
要使用ActivateItem
方法,您的ViewModels
之一必须是Conductor
。我喜欢把它想象成所有观点的基础。这主要是从您的应用开始的第一个ViewModel
(除了登录屏幕,如果有的话)。
阅读更多here.
答案 1 :(得分:-2)
这是一个非常好的解决方案:
您为OrderAddEditView类创建一个构造函数。
并在该构造函数中传递DataContext的id?
ViewModel是View ...的DataContext