C# 绑定嵌套集合时出现问题
我是WPF的初学者,我正在尝试绑定一个嵌套集合 我在网上找到了许多关于绑定的主题,我试着如下。我尝试更改Datacontext和ItemSource的值,但似乎无法正确执行 XAML: 它显示类别名称(例如“软饮料”或“咖啡”),但我无法显示单个项目。还有,有没有更好的方法?如前所述,我是WPF的初学者,似乎有许多有趣的功能我都没有 谢谢你的阅读 使用不允许使用嵌套项,因为它不提供C# 绑定嵌套集合时出现问题,c#,wpf,xaml,binding,nested,C#,Wpf,Xaml,Binding,Nested,我是WPF的初学者,我正在尝试绑定一个嵌套集合 我在网上找到了许多关于绑定的主题,我试着如下。我尝试更改Datacontext和ItemSource的值,但似乎无法正确执行 XAML: 它显示类别名称(例如“软饮料”或“咖啡”),但我无法显示单个项目。还有,有没有更好的方法?如前所述,我是WPF的初学者,似乎有许多有趣的功能我都没有 谢谢你的阅读 使用不允许使用嵌套项,因为它不提供ItemsSource属性 <DataTemplate> <TextBlock Text=
ItemsSource
属性
<DataTemplate>
<TextBlock Text={Binding MyTextValue}/>
</DataTemplate>
你需要使用一个
hierarchycaldatatemplate
而不是DataTemplate
。嗨@Bob,这让我找到了正确的方向!我切换到使用TreeView
+hierarchycaldatatemplate
,如下所示。如果您可以添加您的评论作为答案,我想将其标记为已接受。谢谢!
public class Menu
{
public ObservableCollection<Category> Subs;
public Menu()
{
Subs = new ObservableCollection<Category>();
}
}
public class Category
{
public ObservableCollection<MenuItem> Nodes;
public Category()
{
Nodes = new ObservableCollection<MenuItem>();
}
private string name;
public string Name
{
get { return this.name; }
set { this.name = value; }
}
public Category(string name)
{
this.name = name;
Nodes = new ObservableCollection<MenuItem>();
}
}
public class MenuItem
{
public MenuItem()
{
}
public MenuItem(string name, string description, double cost)
{
this.itemName = name;
this.description = description;
this.cost = cost;
}
private string itemName;
public string ItemName
{
get { return this.itemName; }
set { this.itemName = value; }
}
private string description;
public string Description
{
get { return this.description; }
set { this.description = value; }
}
private double cost;
public double Cost
{
get { return this.cost; }
set { this.cost = value; }
}
}
public Nav1()
{
InitializeComponent();
// Init Model
Menu myMenu = new Menu();
myMenu.Subs.Add(new Category("Soft Drinks"));
myMenu.Subs.Add(new Category("Coffee"));
myMenu.Subs.Add(new Category("Premium"));
myMenu.Subs[0].Nodes.Add(new MenuItem("Pepsi", "Cool & Refreshing", 1.39));
myMenu.Subs[0].Nodes.Add(new MenuItem("Diet Pepsi", "Cool & Refreshing", 1.39));
myMenu.Subs[0].Nodes.Add(new MenuItem("7Up", "Cool & Refreshing", 1.39));
myMenu.Subs[0].Nodes.Add(new MenuItem("Mug Root Beer", "Cool & Refreshing", 1.39));
myMenu.Subs[0].Nodes.Add(new MenuItem("Brisk Iced Tea", "Cool & Refreshing", 1.39));
myMenu.Subs[0].Nodes.Add(new MenuItem("Bottled Water", "Thirsty? Aquafina.", 2.75));
// Set DataContext for StackPanel
Stack.DataContext = myMenu.Subs;
}
<DataTemplate>
<TextBlock Text={Binding MyTextValue}/>
</DataTemplate>
<HierarchicalDataTemplate ItemsSource={Binding MyListOfLevelTwoItems}>
<TextBlock Text={Binding MyLevelOneValue}/>
</HierarchicalDataTemplate>
<DataTemplate DataType={x:Type MyLevelTwoItem}>
<TextBlock Text={Binding MyLevelTwoValue}/>
</DataTemplate>