【问题标题】:DevExpress MVVM : Injected ViewModel is also created by XAML.DevExpress MVVM:注入的 ViewModel 也是由 XAML 创建的。
【发布时间】:2015-12-16 05:54:13
【问题描述】:

我对 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() 创建,我相信它是通过 XAML 完成的:

         DataContext="{dxmvvm:ViewModelSource Type={x:Type ViewModels:CreateEntityWizardViewModel}}"

使用 DialogService 将 ViewModel 传递给表单的方法是什么?

谢谢

【问题讨论】:

    标签: c# wpf xaml mvvm devexpress


    【解决方案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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-09-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多