【发布时间】:2015-11-12 06:06:30
【问题描述】:
我正在使用 MVVM 模式构建 WPF 浏览器应用程序。
我有一个带有数据网格的第一页 (ConsultInvoice)。当我双击其中一行时,我想导航到另一个页面(EditInvoice),将参数中的选定行传递给我的构造函数。
我知道如果我想正确地做事我应该使用依赖注入,但我真的不知道如何在这里使用它。
我怎样才能简单地传递这个构造函数?
咨询发票视图模型
private Invoice _selected;
public Invoice Selected
{
get
{
return _selected;
}
set
{
_selected = value;
OnPropertyChanged("Selected");
}
}
private void Edit()
{
EditInvoiceViewModel editInvoice = new EditInvoiceViewModel(Selected);
/* doing something here*/
}
public ICommand EditCommand
{
get
{
return editCommand ?? (editCommand = new RelayCommand(p => this.Edit(), p => this.CanEdit()));
}
}
EditInvoiceViewModel
public class EditInvoiceViewModel : ViewModelBase
{
public Context ctx = new Context();
Invoice invoice;
PreInvoice preInvoice;
#region properties
private ObservableCollection<PreInvoice> collection;
public ObservableCollection<PreInvoice> Collection
{
get
{
return collection;
}
set
{
collection = value;
OnPropertyChanged("Collection");
}
}
#endregion
public EditInvoiceViewModel(Invoice inv)
{
/* do stuff*/
}
}
【问题讨论】:
-
也许只有我一个人,但我有点困惑。您不是已经将参数(Selected)传递给 ViewModel(ConsultInvoiceViewModel)中的构造函数(EditInvoiceViewModel(Invoice inv))吗?你到底在问什么?
-
@Rowbear 是的,但它的目标是打开一个新的 EditInvoiceView.xaml 并且它只接受默认构造函数。所以我想做的事情不起作用。
-
啊!我懂了。您打算将 EditInvoiceView 显示为弹出窗口还是新窗口?您打算如何控制显示 EditInvoiceView?仅使用 .Show()/.ShowDialog()?来自 ConsultInvoiceViewModel 的所有可能的发票共享一个视图是否有意义?或者您可以一次编辑多张发票吗?
-
@Rowbear,我打算将它显示为一个新窗口,但弹出窗口也可以。在我真的不知道如何导航之后。这就是重点。在我的其他页面之间,我使用超链接。但是现在我需要将参数中的“发票”传递给我的构造函数,这样我就不能再使用超链接了。我只想一张一张地编辑发票。
-
@Cantinou。是否可以在 EditInvoiceView 中保留默认构造函数并在 EditInvoice 中添加 EditInvoiceViewModel 类型的公共属性。因此,您使用默认构造函数构建,并在下一行分配属性。
标签: c# wpf mvvm dependency-injection