gpt4 book ai didi

c# - WPF中TabControl的ItemsSource绑定(bind)到List时如何设计TabPage?

转载 作者:太空狗 更新时间:2023-10-29 21:34:22 35 4
gpt4 key购买 nike

这些是我的类(class):

   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>

现在显然我将有一个 TabControl,列表 F 中的每个项目都有一个页面,所有 TabControl 页面都有一个 TextBlock Something 1 如下所示:

enter image description here

我想要的是只设计其中一个页面。假设将新的 button 添加到名为 Something 3 的 Camel 页面。

最佳答案

根据上面的评论:

为每个选项卡创建一个特定的 ViewModel 类:

public class Tab1: ViewModelBase
{
//... functionality, properties, etc
}

public class Tab2: ViewModelBase
{
//... functionality, properties, etc
}

public class Tab3: ViewModelBase
{
//... functionality, properties, etc
}

然后为每个创建一个特定的View(通常以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>

然后创建DataTemplates对于每个 ViewModel 类型并放置这些 UserControls在他们里面:

编辑: 这些应该在 App.xaml 中定义在 Application.Resources 下:

<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());
}

关于c# - WPF中TabControl的ItemsSource绑定(bind)到List时如何设计TabPage?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17952321/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com