在数据模板中填充列表视图

populating a listview within a datatemplate

我目前在访问 DataTemplate 中的列表视图时遇到问题,每一行都有其唯一的列表,例如 Sam 的某些文档需要点击事件,我只是无法访问控件的名称。

通过研究我发现了命令并使用可视化树助手,但是无法访问列表以将数据与项目源绑定。

 <DataGrid Name="dgUsers">
        <DataGrid.Columns>
            <DataGridTextColumn Header="Client" Binding="{Binding name1}"/>
            <DataGridTextColumn Header="Land Line" Binding="{Binding landline}"/>         
        </DataGrid.Columns>
        <DataGrid.RowDetailsTemplate>
            <DataTemplate x:Name="datatemplate">
                <DockPanel Background="GhostWhite">
                    <Grid>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="200"/>
                            <ColumnDefinition Width="200"/>
                            <ColumnDefinition/>
                        </Grid.ColumnDefinitions>

                        <ListView x:Name="lvPipeline" Margin="10,82,10,156" Grid.Column="2" >
                            <ListView.View>
                                <GridView>

在 xaml 中,您只能在模板中而不是从外部访问像您这样的模板中的命名控件。 不确定我是否一直理解一般应用程序上下文,但我会使用 MVVM 并为像 Sam 这样的对象创建模型和视图模型,并将 Sam 的文档列表放入视图模型并将其绑定到数据模板中的列表框。

我的方法是这样的:

public class UserViewModel
{
    public string Name {get;set}
    public ObservableCollection<string> Documents {get;set;}
    public string SelectedDocument {get;set}

}



  <DataGrid Name="dgUsers" ItemsSource="{Binding Users}">
            <DataGrid.Columns>
                <DataGridTextColumn Header="Client" Binding="{Binding Name}"/>
              <!--  <DataGridTextColumn Header="Land Line" Binding="{Binding LandLine}"/>    -->     
            </DataGrid.Columns>
            <DataGrid.RowDetailsTemplate>
                <DataTemplate x:Name="datatemplate">
                    <DockPanel Background="GhostWhite">
                        <Grid>
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="200"/>
                                <ColumnDefinition Width="200"/>
                                <ColumnDefinition/>
                            </Grid.ColumnDefinitions>

                            <ListView ItemsSource="{Binding Documents}" SelectedItem="{Binding SelectedDocument}" Margin="10,82,10,156" Grid.Column="2" >
                                 <ListView.View>
                                    <GridView>

之后您可以使用 SelectedDocument 属性 并将其绑定到例如文档查看器。