我希望创建一个滚动查看器,显示其垂直滚动条,无论它是否有向下滚动的项目。通过这样做,我寻求从用户滚动到底部时动态地从数据库中获取更多数据。数据存储在datagrid(dgGrid)中,并由scrollviewer(svMain)包装(见下文)。使用在ScrollViewer.ScrollChanged事件上触发的方法检索db中的数据。
<ScrollViewer Grid.Row="0" VerticalScrollBarVisibility="Visible" DockPanel.Dock="Top" Name="svMain" cal:Message.Attach="[Event ScrollChanged] = [Action ScrollMaster($eventArgs)]">
<StackPanel>
<Grid Visibility="{Binding Path=IsFormView, Converter={StaticResource booleanToVisibilityConverter}}">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="200"/>
<ColumnDefinition Width="200"/>
<ColumnDefinition Width="200"/>
<ColumnDefinition Width="200"/>
<ColumnDefinition Width="200"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<StackPanel Grid.Row="0" Grid.Column="0" Orientation="Horizontal">
<CheckBox IsChecked="{Binding MasterDTO.ActiveFlag, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
<Label Content="Active"/>
</StackPanel>
<StackPanel Grid.Row="1" Grid.Column="0">
<con:MandatoryLabel Text="Country Id" />
<TextBox Text="{Binding MasterDTO.CountryId, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
</StackPanel>
<StackPanel Grid.Row="1" Grid.Column="1">
<con:MandatoryLabel Text="Currency"/>
<TextBox Text="{Binding MasterDTO.Currency, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
</StackPanel>
</Grid>
<!-- Grid View -->
<DockPanel Visibility="{Binding Path=IsGridView, Converter={StaticResource booleanToVisibilityConverter}}">
<DataGrid Name="dgGrid" Style="{StaticResource ReadOnlyDatagrid}" SelectedItem="{Binding Path=MasterDTO, Mode=TwoWay}" ItemsSource="{Binding MasterDTOs, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" cal:Message.Attach="[Event SelectionChanged] = [Action GridSelect]">
<DataGrid.Columns>
<DataGridTemplateColumn Header="Active">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<controls:YesNoLabel Value="{Binding ActiveFlag}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn Header="Country Id" Binding="{Binding CountryId}"/>
<DataGridTextColumn Header="Currency" Binding="{Binding Currency}"/>
</DataGrid.Columns>
</DataGrid>
</DockPanel>
</StackPanel>
</ScrollViewer>
问题在于,即使我将scrollviewer的VerticalScrollBarVisibility属性设置为可见(并且始终显示垂直滚动条),滚动条也会被禁用,并且只要数据网格中的数据量,就没有滚动缩略图可见适合屏幕的高度。如果我将屏幕调整为较小的尺寸,则启用垂直滚动条,我可以移动拇指。但是,我想要启用滚动条及其拇指,无论视口的内容是否可以容纳其内容。任何人都可以提供帮助吗?
谢谢!
答案 0 :(得分:1)
我不是WPF的专家,但在阅读帖子后我建议你保持scrollviewer的高度低于其内容,这样你就会看到启用了垂直滚动条。
答案 1 :(得分:0)
默认情况下,DataGrid使用虚拟化,因此只有在将新元素放入视图时才会对其进行初始化和渲染等。这仅在使用DataGrid的默认滚动控件时才有效。
你可以做一个
select count(*) from yourDbTable
使用知道如何获取数据的虚拟对象填充列表。
您还可以在列表末尾添加一个元素,以便在访问其中一个属性时获取更多元素。
绑定和集合更改事件应该完成剩下的工作。
答案 2 :(得分:0)
你可以玩ICollectionView Interface。每次将IEnumerable绑定到ItemsControl时,都会在源对象和目标对象之间隐式插入默认视图。它跟踪当前项目,支持排序,分组等。您可以实现一个自己的集合视图,支持在到达最后一个元素时加载更多项目。