在我的开发工作中,我想创建一个包含行详细信息的数据网格。每一行都包含一个班级信息,如班级名称和学生总数。当用户单击一行时,会将所选类的所有学生信息显示在行详细信息中。
行详细控件也由数据网格组成,此网格的每一行都是学生信息。
可以使用AutoCompleteBox控件编辑学生姓名。它的ItemSource应该绑定到ViewModel的属性StudentNames而不是ClassInformation的属性。 ClassInforamtion也是ViewModel的一个属性。但结果并不奏效。在编辑过程中,StudentNames目前没有绑定。
<UserControl ...>
<Grid x:Name="LayoutRoot" ...>
<sdk:DataGrid
AutoGenerateColumns="False"
ItemsSource="{Binding ClassInformation}"
RowDetailsVisibilityMode="VisibleWhenSelected"
SelectedItem="{Binding SelectedClass, Mode=TwoWay}"
x:Name="dataGrid">
<sdk:DataGrid.Columns>
<sdk:DataGridTextColumn Header="Name" Binding="{Binding Name}"/>
<sdk:DataGridTextColumn Header="Total Student" Binding="{Binding TotalStudent}" IsReadOnly="True"/>
</sdk:DataGrid.Columns>
<sdk:DataGrid.RowDetailsTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<sdk:DataGrid AutoGenerateColumns="False" Grid.Column="0" ItemsSource="{Binding StudentInformation}">
<sdk:DataGrid.Columns>
<sdk:DataGridTemplateColumn Header="Student Name">
<sdk:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock x:Name="studentName" Text="{Binding SSDTestScript.Name}"/>
</DataTemplate>
</sdk:DataGridTemplateColumn.CellTemplate>
<sdk:DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<sdk:AutoCompleteBox ItemsSource="{Binding Path=DataContext.StudentNames, ElementName="LayoutRoot"}" ItemFilter="{Binding ElementName=studentName, Path=Text}"/>
</DataTemplate>
</sdk:DataGridTemplateColumn.CellEditingTemplate>
</sdk:DataGridTemplateColumn>
</sdk:DataGrid.Columns>
</sdk:DataGrid>
</Grid>
</DataTemplate>
</sdk:DataGrid.RowDetailsTemplate>
</sdk:DataGrid>
</Grid>
</UserControl>
我也试过或绑定过表达式。
ItemsSource="{Binding Path=ScriptNames}" DataContext="{Binding}"
ItemsSource="{Binding Path=ScriptNames, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Grid}}"
ItemsSource="{Binding Path=ScriptNames, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=UserControl}}"
顺便问一下,如何在Silverlight 5中指定AncestorLevel?我试过这个表达式,但是当我导航到页面时它会抛出异常。它取决于xaml的逻辑树吗?
ItemsSource="{Binding Path=ScriptNames, RelativeSource={RelativeSource Mode=FindAncestor, AncestorLevel=2}}"
任何建议将不胜感激!提前谢谢。