在 WPF 中对嵌套列表属性进行数据绑定

本文关键字:属性 数据绑定 列表 嵌套 WPF | 更新日期: 2023-09-27 18:36:36

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

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

在 WPF 中对嵌套列表属性进行数据绑定

WPF 应如何解析单元。名字?

如果类型"单位复选框"包含"名称"属性,则该复选框的内容应绑定到"名称":

Content="{Binding Name}"

应始终指定数据模板的类型:

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

这些是可能的问题,但我不能确定,除非你给我们单位复选框代码。