我的英语能力很差,因为我不会说英语。 希望您能理解。
根据TabControl的定义,TabControl将TabItem作为ItemContainerStyle。
[StyleTypedProperty(Property = "ItemContainerStyle", StyleTargetType = typeof(TabItem))]
[TemplatePart(Name = "PART_SelectedContentHost", Type = typeof(ContentPresenter))]
public class TabControl : Selector
我有TabControl和TabItem的DataTemplate。 我的DataTemplate定义如下。
<DataTemplate DataType="{x:Type documentViewModels:ParsingHistoryViewModel}">
<advanceControls:ClosableTabItem Header="test">
<DataGrid IsReadOnly="True" ItemsSource="{Binding ParsingHistory}"/>
</advanceControls:ClosableTabItem>
</DataTemplate>
TabControl在MainWindow中定义。 TabControl的ItemsSource是Documents。 下面的代码显示了这一点。
<Window>
<TabControl Grid.Row="1" x:Name="tabControl"
ItemsSource="{Binding Documents}"/>
</Window>
MinWindow使用MainViewModel。 MainViewModel具有绑定到TabControl的文档。
private ObservableCollection<DocumentViewModel> _documents;
public ObservableCollection<DocumentViewModel> Documents
{
get
{
if (this._documents == null)
{
this._documents = new ObservableCollection<DocumentViewModel>();
this._documents.CollectionChanged += _documents_CollectionChanged;
}
return this._documents;
}
}
将ParsingHistoryViewModel添加到OnDocumentCreate函数中的文档中,该函数在单击该按钮时被调用。该代码如下所示。 (ParsingHistoryViewModel派生自DocumentViewModel)
private void OnDocumentCreate(object sender, Document e)
{
var mainVm = this.mainWindow.DataContext as MainViewModel;
var newDocument = new ParsingHistoryViewModel();
mainVm.Documents.Add(newDocument);
}
当我单击按钮时,称为OnDocumentCreate函数,在该函数中,将创建ParsingHistoryViewModel并将其添加到MainViewModel的文档中。
创建ParsingHistoryViewModel时,将执行以下逻辑。
<DataTemplate DataType="{x:Type documentViewModels:ParsingHistoryViewModel}">
<advanceControls:ClosableTabItem Header="test">
<DataGrid IsReadOnly="True" ItemsSource="{Binding ParsingHistory}"/>
</advanceControls:ClosableTabItem>
</DataTemplate>
上述逻辑被包装到TabItem中,因为TabItem是TabControl的默认ItemContainerStyle。
结果如下所示。
<TabControl>
<TabItem>
<advanceControls:ClosableTabItem Header="test">
<DataGrid IsReadOnly="True" ItemsSource="{Binding ParsingHistory}"/>
</advanceControls:ClosableTabItem>
</TabItem>
</TabControl>
这不是我想要的。我想要的形状如下。
<TabControl>
<advanceControls:ClosableTabItem Header="test">
<DataGrid IsReadOnly="True" ItemsSource="{Binding ParsingHistory}"/>
</advanceControls:ClosableTabItem>
</TabControl>
我应该怎么做才能实现这个目标? 希望您的帮助。
感谢您阅读。