[英]Programmatically add new Datagrid (or other UserControll) into a programmatically generated TabItem (using mvvm)
我有一个带有TabControl的XAML代码,其中包含2个选项卡(选项卡A和选项卡B)。 在选项卡AI可以为选项卡B进行配置中,因此选项卡B可以依赖于选项卡A进行动态更改。选项卡B包含静态的Tabcontroll,未实现任何选项卡(因为稍后将生成选项卡)。 注意:“ Tab A”和“ Tab B”是主选项卡,“ Tab C”,“ Tab D”等是“ Tab 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”中获得新的UserControlls,例如Datagrid。 我不知道如何解决我的问题。 感谢您的回答。
为您的视图模型创建基类:
public abstract class BaseVM {}
而不是修改MyTabItem
属性:
public ObservableCollection<BaseVM> MyTabItems...
创建从BaseVM
继承的自定义视图BaseVM
( public class DatagridVM:BaseVM
)
您的tabControl为:
<TabControl ItemsSource="{Binding MyTabItems}">
<TabControl.ContentTemplate>
<DataTemplate>
<ContentControl Content="{Binding}"/>
</DataTemplate>
</TabControl.ContentTemplate>
</TabControl>
在ResourceDictionary中定义视图模型的视图:
<DataTemplate DataType="{x:Type vm:DatagridVM}">
<Datagrid/>
</DataTemplate>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.