我有一个带有TabControl的XAML代码,其中包含2个选项卡(选项卡A和选项卡B)。在选项卡A中,我可以对选项卡B进行配置,因此选项卡B可以依赖于选项卡A动态更改。选项卡B包含一个静态Tabcontroll,不会实现任何选项卡(稍后将生成选项卡)。注意:“标签A”和“标签B”是主标签,“标签C”,“标签D”等是“标签B”中的子标签。
这是我的XAML代码:
<TabItem Header="TAB_B">
<Grid>
<TabControl ItemsSource="{Binding MyTabItems, UpdateSourceTrigger=PropertyChanged}">
<TabControl.ItemTemplate>
<DataTemplate>
<!-- here I want to show a Datagrid for each new Tab ("Tab C", "Tab D", ...) -->
</DataTemplate>
</TabControl.ItemTemplate>
</TabControl>
</Grid>
</TabItem>
在我的ViewModel中,我有绑定属性:
private ObservableCollection<TabItem> _myTabItems;
public ObservableCollection<TabItem> MyTabItems
{
get { return _myTabItems; }
set
{
_myTabItems = value;
OnPropertyChanged("MyTabItems");
}
}
在我的Viewmodel中,有一个方法可以在Tab B的TabController中构建我的Tab项:
public void BuildContentOfTabB()
{
foreach (var item in myTabList)
{
MyTab = new TabItem();
MyTab.Header = myHeaderString; // e.g. "Tab C", "Tab D"
MyTabItems.Add(MyTab);
}
}
}
这很有效。我在TabController中获得了新的TabItems(“Tab C”,“Tab D”,...)。现在我想在“Tab C”或“Tab D”中获得类似Datagrid的新UserControl。我不知道如何解决我的问题。谢谢你的回答。
答案 0 :(得分:0)
为您的viewmodels创建一个基类:
public abstract class BaseVM {}
修改您的MyTabItem
媒体资源:
public ObservableCollection<BaseVM> MyTabItems...
创建自定义视图模型继承自BaseVM
(public class DatagridVM:BaseVM
)
你的tabControl是:
<TabControl ItemsSource="{Binding MyTabItems}">
<TabControl.ContentTemplate>
<DataTemplate>
<ContentControl Content="{Binding}"/>
</DataTemplate>
</TabControl.ContentTemplate>
</TabControl>
在ResourceDictionary中定义viewmodels的视图:
<DataTemplate DataType="{x:Type vm:DatagridVM}">
<Datagrid/>
</DataTemplate>