У меня есть приложение с основным видом, который содержит несколько подпредставлений.Представления имеют соответствующую ViewModel, которая отображает некоторые данные и события монитора, содержащиеся в моделях.
Предположим, что основное представление выглядит так:
<UserControl x:Class="MyView" Name="myView">
<StackPanel>
<local:MySubView Name="mySubView" someProperty="{Binding DataContext.someField, ElementName=myView}"/>
[...]
</StackPanel>
</UserControl>
, а вспомогательное представление выглядит так:
<UserControl x:Class="MySubView"
prism:ViewModelLocator.AutoWireViewModel="True">
[...]
</UserControl>
Затем в MySubViewModel.cs происходит какое-то событие и вызывается функция с параметром:
public Event EventHandler<SomeClass> MySubViewEvent;
[...]
void foo() {
SomeClass o = new SomeClass(...);
MySubViewEvent.Invoke(this, o);
}
Теперь, в MyViewModel.cs, у меня нет прямой ссылки наsubview и, следовательно, не может сказать что-то вроде
subViewModel.MySubViewEvent += OnSubViewEvent;
void OnSubViewEvent(object sender, SomeClass param) { ... }
Я могу добавить некоторое свойство в MySubViewModel и сделать его зависимым от некоторого поля в MyViewModel со свойством зависимости, но 1. как я могу сделать это наоборотчто некоторый обратный вызов или обработчик события будет вызываться в MyViewModel, когда событие вызывается в MySubViewModel, и 2. могу ли я как-то передать обработчики событий в качестве свойств зависимостей?
Или я должен использовать для этого что-то еще, кроме DependencyProperties?
Какой самый эффективный способ добиться этого?