使用WPF的AddEditView(窗口):在打开表单之前将Id传递给模型construtor

时间:2018-01-27 19:52:06

标签: c# wpf xaml caliburn.micro

我是WPF的新手。我正在尝试创建添加/编辑表单。我还为MVVM添加了Caliburn.Micro frameowrk。

我为EditId创建了一个屏幕。 我不知道如何将模型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 ...

  • AddOrderViewModel.cs
  • 对应的AddOrderView.xaml

课程是这样的:

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的构造函数。

2 个答案:

答案 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