在silverlight app中,我在代码中动态创建标签项(MainView的代码隐藏):
TabItem tab = new TabItem();
CustomerView view = new CustomerView();
view.DataContext = customerViewModel; //or tab.DataContext = customerViewModel;??
tab.Content = view;
DataTemplate template = this.Resources["CustomTabItemHeader"] as DataTemplate;
tab.HeaderTemplate = template;
tabControl.Items.Add(tab);
CustomTabItemHeader(在MainView.xaml中)看起来像:
<UserControl.Resources>
<DataTemplate x:Key="CustomTabItemHeader">
<TextBlock Text="{Binding Path=DisplayName}"/>
</DataTemplate>
</UserControl.Resources>
CustomerViewModel具有DisplayName属性,它实现了INotifyPropertyChanged接口。但DisplayName不会显示在选项卡标题中。有人能解释我为什么吗?
答案 0 :(得分:1)
我愚蠢地认为TabItem标题模板中的文本块会查看tab的datacontext以获取其文本值,但实际情况并非如此。所以我必须做以下事情:
tab.Header = customerViewModel;