首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Prism5 PopupWindowAction与注入

Prism5 PopupWindowAction与注入
EN

Stack Overflow用户
提问于 2015-10-26 14:00:53
回答 2查看 504关注 0票数 1

我看了InteractivityQuickstart官方例子的一部分。

代码语言:javascript
复制
<prism:InteractionRequestTrigger SourceObject="{Binding ItemSelectionRequest, Mode=OneWay}">
        <prism:PopupWindowAction>
            <prism:PopupWindowAction.WindowContent>
                <views:ItemSelectionView />
            </prism:PopupWindowAction.WindowContent>
        </prism:PopupWindowAction>
    </prism:InteractionRequestTrigger>

因此,ItemSelectionRequest调用了较少参数的构造函数。

代码语言:javascript
复制
public ItemSelectionView()
{
    this.DataContext = new ItemSelectionViewModel();
    InitializeComponent();
}

在ItemSelectionView的代码隐藏中。

问题: 1)如何能够在不使用"new“的情况下设置DataContext,因为

代码语言:javascript
复制
public ItemSelectionView(ItemSelectionViewModel model)

代码语言:javascript
复制
[Dependency]
public ItemSelectionViewModel ViewModel
{
    set { this.DataContext = value; }
}

不起作用。我需要在ViewModel =>中获得一些服务,我需要这样的调用

代码语言:javascript
复制
public ItemSelectionViewModel(IEventAggregator eventAggregator)
{
    _eventAggregator=eventAggregator;
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-10-26 14:55:34

如果您需要为弹出ViewModel提供服务,则可以使用ServiceLocator获得它。

代码语言:javascript
复制
public ItemSelectionView()
{
    InitializeComponent();
    DataContext = ServiceLocator.Current.GetInstance<ItemSelectionViewModel>();
}
票数 2
EN

Stack Overflow用户

发布于 2016-10-05 14:46:48

与其像Brian建议的那样使用ServiceLocator来设置ViewModel,不如为ViewModel设置一个无参数构造函数,直接在视图类(XAML或代码背后)中设置ViewModel,并使用ViewModel本身中的ServiceLocator来获取您的ViewModel所需的服务(或它们的接口)。我建议这样做有两个原因:

  • 在弹出视图的构造函数中使用ServiceLocator会在"prism:PopupWindowAction.WindowContent“部分的设计时出现"ServiceLocationProvider必须设置”的错误。(虽然它在运行时运行良好。)
  • 您已经被迫以某种方式绕过依赖注入,所以为什么不简化代码,特别是在您只需要访问一个服务的情况下。

所以你可以这样做:

代码语言:javascript
复制
public ItemSelectionViewModel()
{
    _eventAggregator = ServiceLocator.Current.GetInstance<IEventAggregator>();
}

如果您只需要使用IEventAggregator对象一次,那么甚至没有理由将它分配给一个字段。只需在需要获取事件聚合器并完全删除显式构造函数的地方使用ServiceLocator调用即可。

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

https://stackoverflow.com/questions/33347646

复制
相关文章

相似问题

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