C#中列表框内的列表框

时间:2015-05-11 07:56:53

标签: c# wpf xaml windows-phone-8

我在列表框中有一个列表框,就像这样。

<ListBox x:Name="listBox1">
   <ListBox.ItemTemplate>
      <DataTemplate>
         <StackPanel>
            <StackPanel.Background>
               <SolidColorBrush Color="#FF2B3643" Opacity="1"/>
            </StackPanel.Background>
            <StackPanel>
               <TextBlock Text="{Binding X}"/>
               <TextBlock Text="{Binding Y}"/>
            </StackPanel>
            <Button Click="Button_Click">
            <ListBox x:Name="listBox2">
               <ListBox.ItemTemplate>
                  <DataTemplate>
                     <StackPanel>
                        <TextBlock Text="{Binding Name}"/>
                        <TextBlock Text="{Binding Number}"/>
                     </StackPanel>
                  </DataTemplate>
               </ListBox.ItemTemplate>
            </ListBox>
         </StackPanel>
      </DataTemplate>
   </ListBox.ItemTemplate>
</ListBox>

当我试图绑定内部列表框时,我无法这样做。

我尝试的c#代码如下。

List<Person> p = new List<Person>();

Person student = new Person();
student.Name = "Name1";
student.Number = "Number1";
p.Add(student);

Person teacher = new Person();
teacher.Name = "Name2";
teacher.Number = "Number2";
p.Add(teacher);

listBox2.ItemsSource = p; // cannot access listBox2

但我无法从xaml.cs代码访问listBox2。它说找不到listBox2。另外,我想仅在单击按钮时绑定listBox2,而不是在绑定listBox1时绑定。有人能告诉我如何访问listBox2吗?

1 个答案:

答案 0 :(得分:2)

您已在listBox1的DataTemplate内添加了listBox2。因此,它无法在后面的代码中访问。详细说明,请考虑listBox1中有item1,item2和item3。然后,在item1,item2和item3中将有一个名为listBox2的ListBox对象。您无法在后面的代码中专门指出其中一个对象。实现绑定的一种方法是,在绑定到listBox1的项目中创建一个列表,并将其绑定到内部ListBox

List<Item> MainList = new List<Item>();

class Item
{
   List<Person> PersonList = new List<Person>();
}


<ListBox x:Name="listBox1" ItemsSource = "{Binding MainList}">
   <ListBox.ItemTemplate>
      ...
            <ListBox x:Name="listBox2" ItemsSource= "{Binding PersonList}">
               <ListBox.ItemTemplate>
                  ...
               </ListBox.ItemTemplate>
            </ListBox>
         </StackPanel>
      </DataTemplate>
   </ListBox.ItemTemplate>
</ListBox>

注意:请参阅此相关问题 - Binding listbox in listbox on Windows Phone 8