c# – 当TabControl的ItemsSource绑定到WPF中的列表时,如何设计T
发布时间:2020-12-15 08:42:58 所属栏目:百科 来源:网络整理
导读:这些是我的类: class mainViewModel { public ListFoo F { get; set; } public mainViewModel() { F=new ListFoo() { new Foo(new Animal(){Name = "Cat"}),new Foo(new Animal(){Name = "Dog"}),new Foo(new Animal(){Name = "Camel"}) }; } } public clas
这些是我的类:
class mainViewModel { public List<Foo> F { get; set; } public mainViewModel() { F=new List<Foo>() { new Foo(new Animal(){Name = "Cat"}),new Foo(new Animal(){Name = "Dog"}),new Foo(new Animal(){Name = "Camel"}) }; } } public class Foo { public Animal Animal { get; set; } public Foo(Animal animal) { Animal = animal; } } public class Animal { public string Name { get; set; } } 这是我的MainWindow Xaml代码: <TabControl ItemsSource="{Binding Path=F}"> <TabControl.ItemTemplate> <DataTemplate> <TextBlock Text="{Binding Animal.Name}"/> </DataTemplate> </TabControl.ItemTemplate> <TabControl.ContentTemplate> <DataTemplate> <TextBlock Text="Something 1"/> </DataTemplate> </TabControl.ContentTemplate> </TabControl> 现在显然我将为List F中的每个项目创建一个TabControl,并且所有TabControl页面都有一个TextBlock Something 1,如下所示: 我想要的只是设计其中一个页面.比如在名为Something 3的Camel页面中添加新按钮. 解决方法
根据以上评论:
为每个Tab创建一个特定的ViewModel类: public class Tab1: ViewModelBase { //... functionality,properties,etc } public class Tab2: ViewModelBase { //... functionality,etc } public class Tab3: ViewModelBase { //... functionality,etc } 然后为每个创建一个特定的视图(通常以UserControls的形式): <UserControl x:Class"UserControl1" ...> <!-- UI Elements,etc --> </UserControl> <UserControl x:Class"UserControl2" ...> <!-- UI Elements,etc --> </UserControl> <UserControl x:Class"UserControl3" ...> <!-- UI Elements,etc --> </UserControl> 然后为每个ViewModel类型创建DataTemplates并将这些UserControl放入其中: 编辑:这些应该在Application.Resources下的App.xaml中定义: <Application ....> <Application.Resources> <DataTemplate DataType="{x:Type local:ViewModel1}"> <local:UserControl1/> </DataTemplate> <DataTemplate DataType="{x:Type local:ViewModel2}"> <local:UserControl2/> </DataTemplate> <DataTemplate DataType="{x:Type local:ViewModel3}"> <local:UserControl2/> </DataTemplate> </Application.Resources> </Application> 最后,放一个ObservableCollection< ViewModelBase>在您的主ViewModel中添加以下项: public ObservableCollection<ViewModelBase> Tabs {get;set;} //Representing each Tab Item public MainViewModel() //Constructor { Tabs = new ObservableCollection<ViewModelBase>(); Tabs.Add(new ViewModel1()); Tabs.Add(new ViewModel2()); Tabs.Add(new ViewModel2()); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |