【发布时间】:2010-11-13 11:00:35
【问题描述】:
我正在将一个列表框数据绑定到一个包含两个字符串数组的对象。每个列表框项都设置为由文本框和组合框组成的数据模板。第一个字符串数组绑定到列表,第二个字符串数组绑定到组合框。好吧,至少这是我想要实现的。问题是我无法弄清楚将第二个数组设置为组合框的绑定语法。这是我所拥有的:
第一件事是我的班级有我的两个字符串数组。很简单。请注意,字符串数组内容是为了简单起见。
public class JobAssignments
{
public JobAssignments()
{
m_people.Add("John");
m_people.Add("Bill");
m_people.Add("Frank");
m_people.Add("Steve");
m_jobs.Add("Architect");
m_jobs.Add("Teacher");
m_jobs.Add("Carpenter");
m_jobs.Add("Plumber");
}
private List<string> m_people = new List<string>();
public List<string> People { get { return m_people; } set { m_people = value; } }
private List<string> m_jobs = new List<string>();
public List<string> Jobs { get { return m_jobs; } set { m_jobs = value; } }
};
在代码中,我将这个类的一个实例设置为这个列表框的数据上下文:
<ListBox x:Name="listBox"
Grid.Row="0"
HorizontalContentAlignment="Stretch"
DataContext="{Binding}"
ItemsSource="{Binding People}"
ItemTemplate="{StaticResource JobAssignmentDataTemplate}">
</ListBox>
使用如下所示的数据模板:
<DataTemplate x:Key="JobAssignmentDataTemplate">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0"
Text="{Binding}"/>
<ComboBox Grid.Column="2"
SelectedIndex="0"
ItemsSource="{Binding Jobs ???? }"/>
</Grid>
</DataTemplate>
我的实验通常会得到一个 People 列表框,但每个列表项的组合框都是空的。
如果我使用它,我可以让它工作
ItemsSource="{Binding ElementName=listBox, Path=DataContext.Jobs }"/>
但我不想使用 ElementName,因为它将数组的源硬编码为我想避免的特定列表框。
尝试类似的东西
ItemsSource="{Binding RelativeSource={RelativeSource Self}, Path=Parent.Jobs}"/>
似乎也不起作用,因为它正在网格内寻找工作。
朝着正确的方向稍加推动会大有帮助。
谢谢!
【问题讨论】:
标签: c# wpf data-binding binding