2014-10-28 88 views
0

我有以下类结构和所有类实现INotifyPropertyChangedWPF ItemsControl的数据绑定不工作

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这个perpose。

在我的ViewModel中我有对象Current Faculty Faculty类型。我已经将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

你是否检查过任何绑定错误的输出窗口? – Mark 2014-10-28 12:11:14

回答

1

您不能将当前的教师作为您的第一项itemscontrol的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> 

这应该工作,我不能答应你什么它显示看起来不错,但这取决于你。