2017-05-03 69 views
0

我有一个Infragistics 15.1 WPF XamDataGrid,当用户在窗体上的其他位置保存数据时刷新。我已经想出了如何以编程方式选择保存之前选择的行。我的问题是,如果该行不是网格中的顶部行之一,则用户必须向下滚动到突出显示的行。有没有办法让网格滚动到选定的行?滚动到XamDataGrid中的选定行

XAML代码

<inf:XamDataGrid GroupByAreaLocation="None"        
          SelectedDataItem="{Binding SelectedPayItem, Mode=TwoWay}" 
          ActiveDataItem="{Binding SelectedPayItem, Mode=OneWay}" 
          DataSource="{Binding SelectedProject.ContractProjectPayItems}" ScrollViewer.VerticalScrollBarVisibility="Auto" 

          Grid.Row="2" Grid.Column="2" Grid.ColumnSpan="2" Margin="2.8,3.4,3,2.8"> 

查看型号代码

private void SetSelectedPayItem() 
    { 
     if (SelectedProject != null) 
     { 
      if (SelectedProject.ContractProjectPayItems.Count() > 0) 
      { 
       if (SelectedProject.SelectedPayItemLineNbr == -1) 
       { 
         SelectedPayItem = SelectedProject.ContractProjectPayItems.First(); 
       } 
       else 
       { 
        if (strLineItemNbr != null) 
        { 
         SelectedPayItem = SelectedProject.ContractProjectPayItems.FirstOrDefault(CPPI => CPPI.LineItemNbr == strLineItemNbr); 
        } 
        else 
        { SelectedPayItem = SelectedProject.ContractProjectPayItems[SelectedProject.SelectedPayItemLineNbr]; } 
       } 
      } 
      else 
      { 
       SelectedPayItem = null; 
      } 
     } 
    } 

    string strLineItemNbr; 
    private ContractProjectPayItemModel _selectedPayItem; 
    public ContractProjectPayItemModel SelectedPayItem 
    { 
     get { return _selectedPayItem; } 
     set 
     { 
      _selectedPayItem = value; 
      if (_selectedPayItem != null) 
      { 
       SelectedProject.SelectedPayItemLineNbr = SelectedProject.ContractProjectPayItems.IndexOf(_selectedPayItem); 
       if (_selectedPayItem.ItemInstallations == null) 
       { 
        var oItemInstallation = new clsItemInstallation(); 
        _selectedPayItem.ItemInstallations = oItemInstallation.GetItemInstallsByProjectPayItem(_selectedPayItem.ProjectGuid, _selectedPayItem.PayItemGuid); 

        foreach (var itemInstallation in _selectedPayItem.ItemInstallations) 
        { 
         itemInstallation.PropertyChanged += ItemInstallationsPropertyChanged; 
         itemInstallation.AcceptChanges(); 
        } 
        _selectedPayItem.AcceptChanges(); 
        foreach (var ii in SelectedProject.ContractProjectPayItems) 
        { 
         if (ii.ItemInstallations != null) 
         { 
          foreach (var i2 in ii.ItemInstallations) 
          { 
           i2.AcceptChanges(); 
          } 
         } 
        } 
        RaisePropertyChanged("TotalInstallQty"); 
       } 
       _itemInstallViewModel.SelectedProjectLineItem = SelectedPayItem; 
       strLineItemNbr = SelectedPayItem.LineItemNbr; 
      } 
      RaisePropertyChanged("SelectedPayItem"); 
      RaisePropertyChanged("IsBitumen"); 

      //---------------------------------- 
      // Populate the User Control tabs. 
      //---------------------------------- 
      PopulateUserControls(); 

      SetSelectedItemInstallation(); 

      RaisePropertyChanged("TotalInstallQty"); 
     } 
    } 

回答

1

我能得到这个行为,我想通过移动SelectedDataItem DataSource属性内的方式。

<inf:XamDataGrid GroupByAreaLocation="None"    
         DataSource="{Binding SelectedProject.ContractProjectPayItems}" 
         ScrollViewer.VerticalScrollBarVisibility="Auto" 
         SelectedDataItem="{Binding SelectedPayItem, Mode=TwoWay}" 
         ActiveDataItem="{Binding SelectedPayItem, Mode=TwoWay}" 
         Grid.Row="2" Grid.Column="2" Grid.ColumnSpan="2" Margin="2.8,3.4,3,2.8"> 
     </inf:XamDataGrid>