我对WPF完全陌生。我使用的是DevExpress mvvm框架。我想展示一扇窗户。
我使用的代码是
public void NewEntity()
{
var factory = ViewModelSource.Factory((RemoteTable<AddressLocatorView> aRemoteTable) => new CreateEntityWizardViewModel(aRemoteTable));
CreateEntityWizardViewModel aVM = factory(fDataModule.DataAdapter.GetTable<AddressLocatorView>());
DialogService.ShowDialog(dialogCommands: null, title: "New Entity Wizard", viewModel: aVM);
}这将打开一个窗体并设置视图模型。
不过,在表单的构造函数中,我有
public CreateEntityWizard()
{
InitializeComponent();
}然后,调用EntityWizardViewModel的公共无参数构造。EntityWizardViewModel被创建了两次,一次是由工厂方法创建的,第二次是由InitializeComponent()创建的,我相信InitializeComponent()是通过XAML来创建的:
DataContext="{dxmvvm:ViewModelSource Type={x:Type ViewModels:CreateEntityWizardViewModel}}"使用ViewModel将DialogService传递给表单的方法是什么?
谢谢
发布于 2015-12-16 12:45:35
当您将视图模型传递给DialogService.ShowDialog方法时,此视图模型将自动用作关联视图(对话框内容)的数据上下文。因此,避免重复创建视图模型的最佳方法是删除xaml中的DataContext设置器。若要让设计器知道数据上下文类型,请使用d:DataContext属性:
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
d:DataContext="{dxmvvm:ViewModelSource ViewModel:RegistrationViewModel}"此方法用于RegistrationViewModel,在DevExpress网站上的以下示例中:https://www.devexpress.com/Support/Center/e/T145641.aspx
https://stackoverflow.com/questions/34304853
复制相似问题