Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 绑定嵌套集合时出现问题_C#_Wpf_Xaml_Binding_Nested - Fatal编程技术网

C# 绑定嵌套集合时出现问题

C# 绑定嵌套集合时出现问题,c#,wpf,xaml,binding,nested,C#,Wpf,Xaml,Binding,Nested,我是WPF的初学者,我正在尝试绑定一个嵌套集合 我在网上找到了许多关于绑定的主题,我试着如下。我尝试更改Datacontext和ItemSource的值,但似乎无法正确执行 XAML: 它显示类别名称(例如“软饮料”或“咖啡”),但我无法显示单个项目。还有,有没有更好的方法?如前所述,我是WPF的初学者,似乎有许多有趣的功能我都没有 谢谢你的阅读 使用不允许使用嵌套项,因为它不提供ItemsSource属性 <DataTemplate> <TextBlock Text=

我是WPF的初学者,我正在尝试绑定一个嵌套集合

我在网上找到了许多关于绑定的主题,我试着如下。我尝试更改Datacontext和ItemSource的值,但似乎无法正确执行

XAML:

它显示类别名称(例如“软饮料”或“咖啡”),但我无法显示单个项目。还有,有没有更好的方法?如前所述,我是WPF的初学者,似乎有许多有趣的功能我都没有

谢谢你的阅读

使用不允许使用嵌套项,因为它不提供
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>