WPF ItemsControl数据绑定无法正常工作

时间:2014-10-28 11:51:01

标签: wpf

我有以下类结构,所有类都实现了INotifyPropertyChanged

class University
{
    List<Faculty> Faculties;
}

class Faculty
{
    string Name;
    List<Degree> Degrees;
    bool IsSelected
}

class Degree
{
    string Code;
    List<Subject> Subjects
    bool IsSelected
}

class Subject
{
    string Nme;
    string Code;
    bool IsSelected
}

当教师被选中时,我想在雇佣活动中显示学位名称及其科目名称。 (小组将控制大学目前的课程)

我已使用Itemcontol进行此操作。

在我的ViewModel中,我有Faculty类型的对象 CurrentFaculty 。我已将 CurrentFaculty 绑定到我的XAML

以下是我的XAML代码。

<ItemsControl Grid.Column="2" Grid.Row="0" ItemsSource="{Binding CurrentFaculty, Mode=TwoWay}">
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <StackPanel>
                <CheckBox  Margin="22,10,0,0" IsChecked="{Binding IsSelected, Mode=TwoWay}">
                    <TextBlock Text="All"/>
                </CheckBox>
                <ItemsControl Grid.Column="2" Grid.Row="0" ItemsSource="{Binding Degrees, Mode=TwoWay}">
                    <ItemsControl.ItemTemplate>
                        <DataTemplate>
                            <StackPanel>
                                <CheckBox  Margin="22,10,0,0" IsChecked="{Binding IsSelected, Mode=TwoWay}">
                                    <TextBlock Text="{Binding Name, Mode=TwoWay}"/>
                                </CheckBox>
                                <ItemsControl ItemsSource="{Binding Subjects, Mode=TwoWay}">
                                    <ItemsControl.ItemTemplate>
                                        <DataTemplate>
                                            <CheckBox  Margin="42,10,0,0" IsChecked="{Binding IsSelected, Mode=TwoWay}">                                              
                                                <TextBlock Text="{Binding Name}"></TextBlock>
                                            </CheckBox>
                                        </DataTemplate>
                                    </ItemsControl.ItemTemplate>
                                </ItemsControl>
                            </StackPanel>

                        </DataTemplate>
                    </ItemsControl.ItemTemplate>
                </ItemsControl>
            </StackPanel>

        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

这不起作用。这个错误是什么?

1 个答案:

答案 0 :(得分:1)

您不能将当前教师用作第一个itemcontrol的itemssource,因为它只是一个对象,而不是一个集合。我不知道你为什么要这么做。

如果您要使用ContentControl替换父itemscontrol,只要在视图模型中正确设置了CurrentFaculty并且您的视图datacontext正确设置为视图模型,它就可以按预期工作。

<ContentControl Grid.Column="2" Grid.Row="0" Content="{Binding CurrentFaculty, Mode=TwoWay}">
        <ContentControl.ContentTemplate>
            <DataTemplate>
                <StackPanel>
                    <CheckBox  Margin="22,10,0,0" IsChecked="{Binding IsSelected, Mode=TwoWay}">
                        <TextBlock Text="All"/>
                    </CheckBox>
                    <ItemsControl Grid.Column="2" Grid.Row="0" ItemsSource="{Binding Degrees, Mode=TwoWay}">
                        <ItemsControl.ItemTemplate>
                            <DataTemplate>
                                <StackPanel>
                                    <CheckBox  Margin="22,10,0,0" IsChecked="{Binding IsSelected, Mode=TwoWay}">
                                        <TextBlock Text="{Binding Name, Mode=TwoWay}"/>
                                    </CheckBox>
                                    <ItemsControl ItemsSource="{Binding Subjects, Mode=TwoWay}">
                                        <ItemsControl.ItemTemplate>
                                            <DataTemplate>
                                                <CheckBox  Margin="42,10,0,0" IsChecked="{Binding IsSelected, Mode=TwoWay}">
                                                    <TextBlock Text="{Binding Name}"></TextBlock>
                                                </CheckBox>
                                            </DataTemplate>
                                        </ItemsControl.ItemTemplate>
                                    </ItemsControl>
                                </StackPanel>

                            </DataTemplate>
                        </ItemsControl.ItemTemplate>
                    </ItemsControl>
                </StackPanel>

            </DataTemplate>
        </ContentControl.ContentTemplate>
    </ContentControl>

这应该有用,我不能保证你所展示的东西看起来不错,但这取决于你。