2017-05-03 3 views
0

Ich habe eine Infragistics 15.1 WPF XamDataGrid, die aktualisiert wird, wenn der Benutzer Daten an anderer Stelle im Formular speichert. Ich habe herausgefunden, wie programmgesteuert die Zeile auszuwählen ist, die vor dem Speichern ausgewählt wurde. Mein Problem ist, dass, wenn diese Zeile nicht zu den obersten Zeilen im Raster gehört, der Benutzer zurück zur markierten Zeile scrollen muss. Gibt es eine Möglichkeit, das Raster zur ausgewählten Zeile scrollen zu lassen?Scrollen zur ausgewählten Zeile in XamDataGrid

XAML-Code

<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"> 

Ansicht Model Code

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"); 
     } 
    } 

Antwort

1

Ich war in der Lage zu bekommen dies die Art und Weise zu verhalten, ich durch Bewegen des SelectedDataItem innerhalb der Datasource-Eigenschaft wollte.

<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> 
Verwandte Themen