EventTrigger没有为UserControl的Loaded事件触发

时间:2013-03-18 20:45:28

标签: wpf mvvm

我有一个带有以下事件触发器的UserControl:

<UserControl x:Class="TestApp.Views.MyUserControl"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
         >

<i:Interaction.Triggers>
    <i:EventTrigger EventName="Loaded">
        <i:InvokeCommandAction Command="{Binding OnLoadedCommand}" />
    </i:EventTrigger>
</i:Interaction.Triggers>

它是通过UserControl的构造函数设置的(请忽略ServiceLocator ..这只是一个快速原型):

public MyUserControl()
{
    InitializeComponent();

    DataContext = ServiceLocator.Current.GetInstance<DirectorySearchViewModel>();
}

在我的视图模型中,我有以下内容:

    public ICommand OnLoadedCommand { get; private set; }

    public MyUserControl()
    {
        OnLoadedCommand = new DelegateCommand(OnLoaded);
    }

    public void OnLoaded()
    {
    }

OnLoaded永远不会被调用。如果我将EventName更改为..MouseDown,那么它可以工作,但它只适用于已加载

很确定这是一个愚蠢的错误(发誓我过去曾做过这么多次),但现在似乎无法解决这个问题

2 个答案:

答案 0 :(得分:9)

public MyUserControl()
{
    DataContext = ServiceLocator.Current.GetInstance<DirectorySearchViewModel>();
    InitializeComponent();
}

Aristocrats。

答案 1 :(得分:3)

对于遇到这种情况的任何其他人,你可以在没有代码的情况下做到这一点:

<UserControl x:Class="TestApp.Views.MyUserControl"
    ... etc...
     x:Name="theControl"
     >

    <i:Interaction.Triggers>
        <i:EventTrigger EventName="Loaded">
            <i:InvokeCommandAction
                Command="{Binding ElementName=theControl, Path=OnLoadedCommand}"/>
        </i:EventTrigger>
    </i:Interaction.Triggers>