【问题标题】:DataGrid.ScrollIntoView() does not work, using DataGridTemplateColumn and MVVMDataGrid.ScrollIntoView() 不起作用,使用 DataGridTemplateColumn 和 MVVM
【发布时间】:2012-11-02 19:02:10
【问题描述】:

用户控制DataGridXAML:

<DataGrid x:Name="NamingConventionDataGrid" Width="{Binding ElementName=toolbar, Path=ActualWidth}" MinHeight="100"
     HorizontalAlignment="Left" DockPanel.Dock="Bottom"
     VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="auto" 
     CanUserResizeRows="False" CanUserAddRows="False" CanUserSortColumns="True" CanUserDeleteRows="False"
     CanUserReorderColumns="False" CanUserResizeColumns="False" Background="White" BorderThickness="1"
     VerticalGridLinesBrush="{StaticResource RowGrayBrush}" HorizontalGridLinesBrush="{StaticResource RowGrayBrush}"
     RowBackground="White" AlternatingRowBackground="{StaticResource RowGrayBrush}" AlternationCount="2"
     ColumnHeaderStyle="{StaticResource DataGridColumnHeaderStyle}"
     SelectedItem="{Binding SelectedName, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
     AutoGenerateColumns="False" SelectionMode="Single" SelectionUnit="FullRow"
     RowHeaderWidth="15" RowHeaderStyle="{StaticResource DataGridRowHeaderStyle}" 
     ItemsSource="{Binding ReferenceValues, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
     MaxHeight="230" ScrollViewer.CanContentScroll="True" ScrollViewer.HorizontalScrollBarVisibility="Auto" >

ViewModel 代码:

 ReferenceValues = tempRefs;

 SelectedName = ReferenceValues.FirstOrDefault();
 _view.NamingConventionDataGrid.SelectedItem = SelectedName;
 _view.NamingConventionDataGrid.UpdateLayout();
 _view.NamingConventionDataGrid.ScrollIntoView(SelectedName);

当我使用 SelectedItem 对象 {Binding} 调用 ScrollIntoView() 时,它会选择对象(我知道这是因为 WPF 应用程序上的其他内容发生了变化),但它不会滚动到对象所在的位置,并且SelectedItem 对象不会像单击DataGrid 时那样突出显示。我是否在某处遗漏了一些代码,可以让我滚动到SelectedItem 所在的位置,并像用户滚动到该项目并单击该行一样突出显示它?

【问题讨论】:

    标签: c# wpf datagrid scroll selecteditem


    【解决方案1】:

    我认为问题是由于 DataGrid 只为那些可见的项目和每个方向的一些项目创建容器。

    尝试像这样设置 DataGrid 的 IsVirtualizing 属性:

    VirtualizingStackPanel.IsVirtualizing="False" 
    

    在我这样做之前,我在支持多项选择和滚动方面遇到了类似的问题。

    【讨论】:

    • 为有用性投票,但这不是我问题的根源。 :)
    【解决方案2】:

    我忘记从_view 对象设置一个Binding 以映射到UserControl

    一旦我添加了以下代码,一切都会再次运行。

     model._view = _view.NamingConventionControl;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-08
      • 2018-12-12
      • 2018-08-04
      • 2018-03-19
      • 2013-08-15
      • 1970-01-01
      • 1970-01-01
      • 2023-03-18
      相关资源
      最近更新 更多