我正在使用MVVM,我正在尝试绑定TabControl's
ItemsSource
,我使用了这段代码:
<TabControl ItemsSource="{Binding ProjectComponents}"
SelectedIndex="{Binding SelectedMenu, Mode=TwoWay}" Grid.Column="1" Margin="5">
对于视图模型:
projectComponents = new ObservableCollection<TabItem>();
projectComponents.Add(new TabItem()
{
Content = new ProjectComponentsView()
{
DataContext = new ProjectClientHandlerViewModel()
}
});
我在Silverlight
项目中使用了它,它运行得很好,但在WPF
中,我不知道为什么TabItem
的内容不会秀。
修改
我编写了我的代码:
查看:
<TabControl ItemsSource="{Binding ProjectComponents}" SelectedIndex="{Binding SelectedMenu, Mode=TwoWay}" Grid.Column="1" Margin="5">
<TabControl.ContentTemplate>
<DataTemplate >
<this:ProjectComponentsView DataContext="{Binding}"/>
</DataTemplate>
</TabControl.ContentTemplate>
</TabControl>
查看型号:
projectComponents = new ObservableCollection<ProjectComponentViewModel>();
projectComponents.Add(new ProductViewsHandlerViewModel());
其中ProjectComponentViewModel
是ProductViewsHandlerViewModel
的基类,但它仍无效。
答案 0 :(得分:2)
这是一个快速启动的例子
public class MainVm : VMBase
{
public ObservableCollection<TabVM> Items { get; set; }
public VMBase SelectedItem {get;set;}
public MainVm()
{
Items = new ObservableCollection<TabVM>()
{
new TabVM(){Header="A",Content = new SomeVm()},
new TabVM(){Header="B",Content = new SomeVm()},
new TabVM(){Header="C",Content = new SomeVm()},
new TabVM(){Header="D",Content = new OtherVm()}
};
}
}
public class TabVM : VMBase
{
public string Header { get; set; }
public VMBase Content { get; set; }
}
public class SomeVm : VMBase{}
public class OtherVm : VMBase{}
public class VMBase { }
<TabControl ItemsSource="{Binding Items}" SelectedItem="{Binding SelectedItem}">
<TabControl.Resources>
<DataTemplate DataType="{x:Type local:SomeVm}">
<TextBlock>SomeVm Template</TextBlock>
</DataTemplate>
<DataTemplate DataType="{x:Type local:OtherVm}">
<TextBlock>OtherVm Template</TextBlock>
</DataTemplate>
</TabControl.Resources>
<TabControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Header}"></TextBlock>
</DataTemplate>
</TabControl.ItemTemplate>
<TabControl.ContentTemplate>
<DataTemplate>
<ContentControl Content="{Binding Content}"></ContentControl>
</DataTemplate>
</TabControl.ContentTemplate>
</TabControl>
我们在资源中设置了基于ViewModel
类型的模板,您还应该使用代表ViewModel
的{{1}},TabItem
在上面的片段中。
在标签控件的TabVM
中设置标题模板,在ItemTemplate
中放置ContentTemplate
并将其ContentControl
绑定到Content
} Content
的属性。
并且不要忘记实施TabVM
。