スタイルを使用してタブとしてレンダリングされ、関連するコンテンツを引き出してタブに表示する ViewModel のコレクションがあります。
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>
ユーザーコントロールのインスタンスを作成し、TabViewModel の「コンテンツ」プロパティをそれに設定して、ユーザーコントロールが TabItem のコンテンツ領域に表示されるようにします。
MyCollectionOfViewModels.Add(new TabViewModel()
{
Content = new MyUserControl();
});
私の質問は、TabViewModel の Content プロパティに追加された MyUserControl (またはそのサブ コントロール) を許可して、TabViewModel が処理するイベントを発生させたいということです。
誰も私がそれを行う方法を知っていますか?
RoutedEvents と RoutedCommands を使用して実験しましたが、100% 動作し、MVVM と互換性を持たせることはできませんでした。これは RoutedEvent または RoutedCommand で実行できると本当に思いますが、これを機能させることができないようです。
注: 関連する Prism 固有のコードの一部を削除しましたが、なぜそんなにばかげたことをするのか疑問に思っている方のために説明すると、それは Prism の RegionManager を使用して制御にとらわれないようにしようとしているためです。