事件触发器不会触发UserControl的加载事件。

时间:2021-07-22 15:49:46

I have a UserControl with the following event trigger:

我有一个具有以下事件触发器的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>

It is being set via the constructor of the UserControl (please ignore the ServiceLocator ..this is just a quick prototype):

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

public MyUserControl()
{
    InitializeComponent();

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

In my view-model I have the following:

在我的视图模型中,我有以下几点:

    public ICommand OnLoadedCommand { get; private set; }

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

    public void OnLoaded()
    {
    }

OnLoaded never gets called. If I change the EventName to say ..MouseDown, then it works but it just won't work for Loaded

OnLoaded从来不被调用。如果我把EventName改为MouseDown,它是有效的,但是它不适合加载。

Pretty sure it's a stupid mistake (swear I've done this a million times before in the past) but can't seem to figure it out right now

我很确定这是一个愚蠢的错误(我发誓我以前已经犯过无数次了),但现在看来我还是搞不清楚

2 个解决方案

#1


9  

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

The Aristocrats.

贵族。

#2


3  

For anyone else that stumbles across this you can do it without code behind like this:

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

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

#1


9  

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

The Aristocrats.

贵族。

#2


3  

For anyone else that stumbles across this you can do it without code behind like this:

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

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