[英]How do you bind to a property in a xaml code-behind if the usercontrol's datacontext is a view-model?
[英]How to bind a class to a TabItem DataContext in code-behind
我有一个名为TabViewModel的类,它具有诸如Name等的属性。
我需要能够动态添加选项卡,并且每当添加新选项卡时,都需要创建TabViewModel的新实例并将其绑定到新选项卡。
这是我的代码:
XAML:
<TabControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}"/>
</DataTemplate>
</TabControl.ItemTemplate>
后面的代码:添加新标签时。
_tabItems = new List<TabItem>();
tabItem.DataContext = ViewModel.CreateNewTabViewModel();
_tabItems.Add(tabItem);
TabControl1.ItemsSource = _tabItems;
TabControl1.SelectedIndex = 0;
因此,假设CreateNewTabViewModel创建一个新的TabViewModel并将Name属性设置为显示在选项卡标题上,这就是TextBlock绑定到Name的原因。
我也尝试了tabItem.SetBinding,但是没有用。
请指教。
谢谢!
_tabItems = new List<TabItem>();
//...
_tabItems.Add(tabItem);
TabControl1.ItemsSource = _tabItems;
用仅包含一个选项卡项目的新列表替换整个选项卡项目列表。
也就是说,代码尚不十分清楚所执行的操作,似乎不需要很多。 这有效:
var tabItems = new List<TabViewModel>();
tabItems.Add(new TabViewModel { Name = "MyFirstTab" });
myTabControl.ItemsSource = tabItems;
myTabControl.SelectedIndex = 0;
您需要做的就是将视图模型的实例添加到视图模型列表中,并指向选项卡控件以使用它。 无需设置数据上下文。 通过设置项目源,可以隐式地将每个选项卡的数据上下文设置为集合中的项目。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.