我使用以下XAML代码显示已检查列表框的列表。
<ListBox x:Name="lbxProjects" ItemsSource="{Binding}">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel>
<ListBox x:Name="lbxUnits" ItemsSource="{Binding Units}">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel>
<CheckBox Content="{Binding unit.Name}" IsChecked="{Binding isSelected}"/>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
数据模型如下
public class ProjectsListBox
{
public Project project { get; set; }
public List<UnitsCheckBox> Units = new List<UnitsCheckBox>();
public ProjectsListBox(Project project)
{
this.project = project;
foreach(var d in project.Documents)
{
Units.Add(new UnitsCheckBox(d));
}
}
}
public class UnitsCheckBox : INotifyPropertyChanged
{
public Document unit { get; set; }
private bool isselected = true;
public bool isSelected
{
get { return isselected; }
set
{
isselected = value;
NotifyPropertyChanged("isSelected");
}
}
public UnitsCheckBox(Document d)
{
unit = d;
}
}
我正在为父列表框分配数据源,如
lbxProjects.DataContext = projectsList;
代码创建子列表框,但不创建子列表框内的复选框。我错过了什么?
答案 0 :(得分:0)
WPF如何解析unit.Name?
如果UnitsCheckBox类型包含Name属性,则CheckBox的内容应绑定到Name:
Content="{Binding Name}"
您应始终指定DataTemplate的类型:
<DataTemplate DataType="{x:Type local:UnitsCheckBox}" ...>
这些是可能出现的问题,但除非您向我们提供UnitsCheckBox代码,否则我无法确定。