我在列表框中有一个列表框,就像这样。
<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吗?
答案 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