我正在尝试从TabItem将对象分配给datacontext。要了解一下,请查看以下代码示例
<UserControl x:Class="CustomCopyNas.UserControls.LoginUsers"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:igWindows="http://infragistics.com/Windows"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<Grid Margin="5,0,5,0">
<igWindows:XamTabControl Name="_xamTabControl"
TabLayoutStyle="MultiRowSizeToFit"
MaximumTabRows="4"
MaximumSizeToFitAdjustment="50"
MinimumTabExtent="100"
InterTabSpacing="2"
InterRowSpacing="2"
Theme="Metro"
AllowTabClosing="False"
TabItemCloseButtonVisibility="WhenSelectedOrHotTracked">
<igWindows:XamTabControl.ContentTemplate>
<DataTemplate>
<TextBox Text="{Binding Prop}"/>
</DataTemplate>
</igWindows:XamTabControl.ContentTemplate>
</igWindows:XamTabControl>
</Grid>
</UserControl>
如您所见,我使用datatemplate作为TabItem内容外观,TextBox。 TextBox Text属性绑定到datacontext的属性。
来自UserControl的部分类
public class Foo
{
public string Prop {
get { return "Hello Foo"; }
}
}
/// <summary>
/// Interaction logic for LoginUsers.xaml
/// </summary>
public partial class LoginUsers : UserControl
{
public LoginViewModel LoginViewModel = new LoginViewModel("file.xml");
public LoginUsers()
{
InitializeComponent();
foreach (var server in LoginViewModel.ServerUsers)
{
string header = server.Server;
string name = "tabItem" + header;
_xamTabControl.Items.Add(new TabItemEx() { Header = header, Name = name, DataContext = new Foo() });
}
}
}
作为TabItem内容的输出我什么都没有,所以emtpy内容,为什么?
答案 0 :(得分:1)
您似乎没有正确宣布您的TabControl
XAML。通常使用TabControl.ItemsSource
属性来看待它更像这样定义:
<TabControl ItemsSource="{Binding YourCollectionProperty}">
<TabControl.ItemTemplate> <!-- Header Template-->
<DataTemplate>
<TextBlock Text="{Binding HeaderText}" />
</DataTemplate>
</TabControl.ItemTemplate>
<TabControl.ContentTemplate> <!-- Body Template-->
<DataTemplate>
<TextBlock Text="{Binding BodyText}" />
</DataTemplate>
</TabControl.ContentTemplate>
</TabControl>
要实现此目的,您需要创建一个包含HeaderText
和BodyText
属性的自定义类。然后,您需要在名为public ObservableCollection<YourCustomClass>
的代码中创建一个YourCollectionProperty
集合属性。
请注意,两个Binding
内的DataTemplate
会自动将DataContext
设置为YourCollectionProperty
集合中的项目,这就是您的Binding
{ {1}} Prop
属性无效。
答案 1 :(得分:0)
尝试移动foreach循环,以便在_xamTabControl.Loaded事件触发时触发。那应该是诀窍