首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DevExpress MVVM : ViewModel也是由XAML创建的。

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

Stack Overflow用户
提问于 2015-12-16 05:54:13
回答 1查看 1.5K关注 0票数 3

我对WPF完全陌生。我使用的是DevExpress mvvm框架。我想展示一扇窗户。

我使用的代码是

代码语言:javascript
复制
    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);
    }

这将打开一个窗体并设置视图模型。

不过,在表单的构造函数中,我有

代码语言:javascript
复制
    public CreateEntityWizard()
    {
        InitializeComponent();
    }

然后,调用EntityWizardViewModel的公共无参数构造。EntityWizardViewModel被创建了两次,一次是由工厂方法创建的,第二次是由InitializeComponent()创建的,我相信InitializeComponent()是通过XAML来创建的:

代码语言:javascript
复制
         DataContext="{dxmvvm:ViewModelSource Type={x:Type ViewModels:CreateEntityWizardViewModel}}"

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

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-16 12:45:35

当您将视图模型传递给DialogService.ShowDialog方法时,此视图模型将自动用作关联视图(对话框内容)的数据上下文。因此,避免重复创建视图模型的最佳方法是删除xaml中的DataContext设置器。若要让设计器知道数据上下文类型,请使用d:DataContext属性:

代码语言:javascript
复制
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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34304853

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档