У меня есть коллекция ViewModels, которые отображаются как вкладки с использованием стиля для извлечения соответствующего содержимого для отображения на вкладке:
public class TabViewModel : DependencyObject
{
public object Content
{
get { return (object)GetValue(ContentProperty); }
set
{
SetValue(ContentProperty, value);
}
}
}
Вот TabControl:
<TabControl
ItemsSource={Binding MyCollectionOfTabViewModels}"
ItemContainerStyle="{StaticResource TabItemStyle}" />
А вот и стиль
<Style TargetType="TabItem" x:Key="TabItemStyle">
<Setter Property="Content" Value="{Binding Content}"/>
</Style>
Мы создаем экземпляр пользовательского элемента управления и устанавливаем для него свойство Content модели TabViewModel, чтобы пользовательский элемент управления отображался в области содержимого TabItem.
MyCollectionOfViewModels.Add(new TabViewModel()
{
Content = new MyUserControl();
});
У меня вопрос: Я хотел бы разрешить MyUserControl (или любому из его подэлементов управления), добавленному к свойству Content TabViewModel, разрешить вызывать событие, которое обрабатывает TabViewModel.
Кто-нибудь знает, как бы я это сделал?
Мы экспериментировали с RoutedEvents и RoutedCommands, но не смогли заставить что-либо работать на 100 % и обеспечить совместимость с MVVM. Я действительно думаю, что это можно сделать с помощью RoutedEvent или RoutedCommand, но, похоже, я не могу заставить это работать.
Примечание. Я удалил часть соответствующего кода, относящегося к Prism, но если вам интересно, почему мы делаем что-то настолько глупое, то это потому, что мы пытаемся оставаться независимыми от управления с помощью Prism RegionManager.