DevExpress MVVM:注入的ViewModel也是由XAML创建的。

时间:2015-12-16 05:54:14

标签: c# wpf xaml mvvm devexpress

我是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传递给表单的方法是什么?

谢谢

1 个答案:

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