MVVM Datagrid嵌套

时间:2011-12-06 08:58:09

标签: datagrid nested

我有一个数据网格,我必须在其中显示图像,并再次显示必须显示消息的datagris。我可以绑定父数据网格并显示图像,但内部数据网格没有绑定,也没有显示任何错误。

我错过了什么吗?这是我的xaml

    <DataGrid Grid.Column="0" AutoGenerateColumns="False" Width="Auto" ItemsSource="{Binding Col1}" ScrollViewer.VerticalScrollBarVisibility="Auto">
                <DataGrid.Columns>
                    <DataGridTemplateColumn Width="SizeToCells" Header="Column1" >
                        <DataGridTemplateColumn.CellTemplate>
                            <DataTemplate  >
                                <StackPanel Orientation="Vertical" >
                                    <Image   Source="{Binding ImagePathItem1}" Height="20" Width="20"/>
                                    <DataGrid AutoGenerateColumns="False" ItemsSource="{Binding}" Height="250" Width="250">
                                        <DataGrid.Columns>
                                            <DataGridTemplateColumn Width="SizeToCells" Header="Column2">
                                                <DataGridTemplateColumn.CellTemplate>
                                                    <DataTemplate>
                                                        <TextBlock Text="{Binding MessageData}" Foreground="Orange"/>
                                                    </DataTemplate>
                                                </DataGridTemplateColumn.CellTemplate>
                                            </DataGridTemplateColumn>
                                        </DataGrid.Columns>
                                    </DataGrid>
                                </StackPanel>                                                                        
                            </DataTemplate>
                        </DataGridTemplateColumn.CellTemplate>
                    </DataGridTemplateColumn>                       
                </DataGrid.Columns>
            </DataGrid>

Col1集合绑定到父数据源,数据可用于所有其他控件。

1 个答案:

答案 0 :(得分:1)

我认为你错误解释了什么是绑定,在你的例子中,绑定表达式是不完整的:ItemsSource="{Binding}"

正如您在评论中所说,Col1ObservableCollection<MyCollectionClass>。有趣的是,班级本身,但无论如何。

Col1 绑定到父DataGrid时,类控件的属性可用于绑定(对于集合中的每个项目)。如果 MyCollectionClass 中再次没有 Col1 属性,则无法将其绑定到内部DataGrid!

想象一下,你有以下课程(简化):

public class MyCollectionClass {

    public string Firstname { get; set; }
    public string Lastname { get; set; }

}
ObservableCollection<MyCollectionClass> Col1;

然后你可以用这种方式绑定:

ParentDataGrid: {Binding Col1)
     TextBox: {Binding Firstname}
     TextBox: {Binding Lastname}
     InnerDataGrid: {Binding Col1} // You can't do that

对于集合中每个类的实例,您的DataGrid中将有一行名字姓氏,因为它们是该类的公共属性。但不是 Col1