在WPF中数据绑定嵌套的List属性

时间:2015-01-07 06:37:17

标签: c# wpf xaml data-binding

我使用以下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;

代码创建子列表框,但不创建子列表框内的复选框。我错过了什么?

1 个答案:

答案 0 :(得分:0)

WPF如何解析unit.Name?

如果UnitsCheckBox类型包含Name属性,则CheckBox的内容应绑定到Name:

Content="{Binding Name}"

您应始终指定DataTemplate的类型:

<DataTemplate DataType="{x:Type local:UnitsCheckBox}" ...>

这些是可能出现的问题,但除非您向我们提供UnitsCheckBox代码,否则我无法确定。