在数据模板中填充列表视图
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 属性 并将其绑定到例如文档查看器。
我目前在访问 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 属性 并将其绑定到例如文档查看器。