雷切爾向我指出她的意見,以原來的問題的解決方案。 我沒有嘗試實現特殊的棱鏡功能和棱鏡區域,而是使用DataTemplates實現了更直接的MVVM實現。
視圖模型輪廓:
public abstract class ContainerViewModel : BindableBase
{
public ObservableCollection<ItemViewModel> Items { get; set; }
public ItemViewModel ActiveItem { get; set; }
protected virtual void Add(ItemViewModel item) { ... }
protected virtual void Remove(ItemViewModel item) { ... }
protected virtual void Activate(ItemViewModel item) { ... }
}
和XAML:
<TabControl Grid.Column="1" ItemsSource="{Binding Items}" SelectedItem="{Binding ActiveItem}">
<TabControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Table.TableName}" />
</DataTemplate>
</TabControl.ItemTemplate>
<TabControl.ContentTemplate>
<DataTemplate DataType="{x:Type viewModels:QueryViewModel}">
<local:QueryView />
</DataTemplate>
</TabControl.ContentTemplate>
</TabControl>
我認爲你正在尋找使用隱式的DataTemplate。這只是一個在XAML中使用TargetType定義的DataTemplate,但不包含Key。在Visual Tree中遇到指定對象時,WPF將自動使用該DataTemplate繪製指定對象,例如,當它嘗試呈現其中ItemsSource設置爲ViewModels集合的TabControl時。如果需要,請參閱[這裏](http://stackoverflow.com/a/8645746/302677)。 – Rachel