我有以下类结构,所有类都实现了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>
这不起作用。这个错误是什么?
答案 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>
这应该有用,我不能保证你所展示的东西看起来不错,但这取决于你。