QA@IT

WPF UserControlのイベントを親側で捕まえるには

10035 PV

WPFアプリ(Prismを使用していて、mvvmの形式になります。)を開発しております。

UserControlにあるボタンが押下された場合に
MainWindowのViewModelにあるメソッドを呼びたい場合はどのようにすればよいのでしょうか?

<uc:View Margin="5" Event="xxxxx" />

上記のようにやりますと、MainWindow.csのコードビハインド上で捕まえることは
できましたが、ViewModel上で捕まえたいと考えておりますが、commandでバインドしましても
メソッドが呼ばれませんでした・・ご教授をお願いいたします。

UC(View.cs)
public static readonly RoutedEvent Event = EventManager.RegisterRoutedEvent("Event", RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(View));
public event RoutedEventHandler SettingConfirmed
{
add { AddHandler(Event , value); }
remove { RemoveHandler(Event , value); }
}

void RaiseClickEvent()
{
RoutedEventArgs newEventArgs = new RoutedEventArgs(View.Event );
RaiseEvent(newEventArgs);
}
private void SignalParent(object sender, System.Windows.RoutedEventArgs e)
{
RaiseClickEvent();
}

MainWindow(Xaml)
<View Margin="5">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Event">
<i:InvokeCommandAction Command="{Binding TestCommand}" CommandParameter="{Binding ElementName=searchResults, Path=SelectedItems}" />
</i:EventTrigger>
</i:Interaction.Triggers>
</uc:View >

MainWindowViewModel(.cs)
public DelegateCommand TestCommand { get; private set; }

public MainWindowViewModel()
{
TestCommand = new DelegateCommand(method);
}
private async void method(string navigatePath)
{
** //ここが呼ばれたい。**
}

  • MainWindow,UserControl共に
    ViewModelを持っておりまして、UserControlのViewModelを
    外しましたところ、親側でイベントを拾うことができました。。

    両方にViewModelがある場合で、親でイベントを拾うにはどのようにしたら
    よろしいのでしょうか。

    *Prismを使用しております。
    -
  • 自己解決いたしました。
    EventAggregatorを使用しました。
    -
ウォッチ

この質問への回答やコメントをメールでお知らせします。