我是WPF的新手。我正在使用DevExpress mvvm框架。我想从viewmodel中显示一个窗口。
我正在使用的代码是
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);
}
这将打开一个表单并设置viewmodel。
虽然,在表单的构造函数中,我有
public CreateEntityWizard()
{
InitializeComponent();
}
反过来,它调用EntityWizardViewModel的公共无参数构造。 EntityWizardViewModel创建两次,一次是工厂方法,第二次是InitializeComponent(),我相信它是通过XAML实现的:
DataContext="{dxmvvm:ViewModelSource Type={x:Type ViewModels:CreateEntityWizardViewModel}}"
使用DialogService将ViewModel传递给表单的方法是什么?
谢谢
答案 0 :(得分:1)
将视图模型传递给DialogService.ShowDialog方法时,此视图模型将自动用作关联视图(对话框内容)的数据上下文。因此,避免重复视图模型创建的最佳方法是删除xaml中的DataContext setter。要让设计人员知道您的数据上下文类型,请使用d:DataContext属性:
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
d:DataContext="{dxmvvm:ViewModelSource ViewModel:RegistrationViewModel}"
此方法用于DevExpress网站上的以下示例中的RegistrationViewModel:https://www.devexpress.com/Support/Center/e/T145641.aspx