2012-04-12 11 views
5

Ich möchte eine Zeile meines Datenrasters programmatisch anzeigen. Ich habe mehr als 100 Reihen. Wenn ich eine Zeile erzeuge (was ich mache, indem ich ein Objekt zu einer beobachtbaren Sammlung hinzufüge), möchte ich, dass diese neue Zeile ausgewählt wird und diese in den Blick bringt. Ich konnte die neue Zeile in meinem Code auswählen, konnte aber nicht scrollen. Darüber hinaus möchte ich, dass die erste Zelle der Zeile im Bearbeitungsmodus ist, damit der Benutzer Text eingeben kann. Ich befolge MVVM Muster für die Anwendung und möchte Null Code in meinen Ansichten behalten. Wie kann ich das erreichen?Programmatische Darstellung einer DataGrid-Zeile in WPF, MVVM

Jede Hilfe oder einen Vorschlag versteht sich ....

Update:

Das, was ich in meiner XAML tat

<telerik:RadGridView ItemsSource="{Binding AllPartClasses}" 
        SelectedItem="{Binding SelectedPartClassViewModel, Mode=TwoWay}"   
        SelectionMode="Single" IsSynchronizedWithCurrentItem="True"> 

meiner Meinung nach Modell habe ich dieses

void AddNewPartClassExecute() 
    { 
     PartClass newPartClass = new PartClass(); 
     PartClassViewModel tempPartClass = new PartClassViewModel(newPartClass); 
     tempPartClass.IsInValid = true; 
     AllPartClasses.Add(tempPartClass); 
     SelectedPartClassViewModel = tempPartClass; 
     Global.DbContext.PartClasses.AddObject(newPartClass); 

     //OnPropertyChanged("AllPartClasses"); 
    } 
public PartClassViewModel SelectedPartClassViewModel 
    { 
     get 
     { 
      return _selectedPartClassViewModel; 
     } 
     set 
     { 
      _selectedPartClassViewModel = value; 
      OnPropertyChanged("SelectedPartClassViewModel"); 
     } 
    } 

Es hat nicht für mich funktioniert.

Antwort

2

Wenn Sie dem MVVM-Muster folgen, sollten Sie keine UI-spezifischen Dinge wie das Scrollen von einem Code ausführen.

Lösung wäre einfach sein - nur DataGrid.SelectedItem in Ansichtsmodell auf eine Eigenschaft binden und wenn ein neues Element in der Artikel-Auflistung hinzufügen nur eine Eigenschaft zu SelectedItem gebunden aktualisieren, so würde es nur hinzugefügt Artikel und Daten-Grid Referenz sollte eine entsprechende Zeile auswählen automatisch.

<DataGrid 
    ItemsSource="{Binding UnderyingItemsCollection}" 
    SelectedItem="{Binding RecentlyAddedItem, Mode=TwoWay}" 
    IsSynchronizedWithCurrentItem="True"> 
+1

Vielen Dank für die Suche. Ich habe getan, was du vorgeschlagen hast. Aber noch kein Glück. Ich habe meinen Code im Update-Abschnitt hinzugefügt. Bitte lassen Sie mich wissen, wenn ich etwas vermisse. Ich habe die ausgewählte Zeile bekommen, aber was soll ich tun DataGrid zu scrollen, um die untere Zeile ...? – IamaC

+0

Ich habe es versucht, aber es scrollt nicht zur Zeile 'SelectedItem'. Ich habe versucht, 'SelectedItem' von viewModel zu ändern, aber' DataGrid' scrollt nicht in die Zeile 'SelectedItem'. – StepUp

5

Für die regelmäßige WPF DataGrid können Sie ScrollIntoView verwenden. Verknüpfen Sie in Ihrer Ansicht das SelectionChanged-Ereignis in der Code-Behind-CS-Datei Ihrer Sicht mit der folgenden.

private void OnSelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
    Selector selector = sender as Selector; 
    DataGrid dataGrid = selector as DataGrid; 
    if (dataGrid != null && selector.SelectedItem != null && dataGrid.SelectedIndex >= 0) 
    { 
     dataGrid.ScrollIntoView(selector.SelectedItem); 
    } 
}