11

次のイベントトリガーを持つ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と言うように変更すると、機能しますが、Loadedでは機能しません。

それはばかげた間違いだと確信しています(過去に100万回これをやったことを誓います)が、今はそれを理解できないようです

4

2 に答える 2

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

貴族。

于 2013-03-18T21:03:27.230 に答える
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>
于 2014-08-20T10:39:03.950 に答える