5 votes

Programmer l'affichage d'une ligne de Datagrid dans WPF, MVVM

Je voudrais faire apparaître une ligne de ma grille de données de manière programmatique. J'ai plus de 100 lignes. Lorsque je crée une ligne (ce que je fais en ajoutant un élément à une collection observable), je voudrais que cette nouvelle ligne soit sélectionnée et affichée. J'ai pu sélectionner la nouvelle ligne dans mon code mais je n'ai pas pu faire défiler les lignes. De plus, je veux que la première cellule de la rangée soit en mode édition pour que l'utilisateur puisse saisir du texte. Je suis le modèle MVVM pour l'application et j'aimerais ne pas avoir de code dans mes vues. Comment puis-je y parvenir ?

Toute aide ou suggestion sera appréciée.....

Mise à jour :

Voici ce que j'ai fait dans mon XAML

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

dans mon modèle de vue, j'ai fait ceci

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

Cela n'a pas fonctionné pour moi.

9voto

KornMuffin Points 778

Pour la version normale de WPF DataGrid vous pouvez utiliser ScrollIntoView . Dans votre vue, connectez l'événement SelectionChanged à ce qui suit dans le fichier code-behind cs de votre vue.

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

0voto

sll Points 30638

Lorsque vous suivez le modèle MVVM, vous ne devez pas faire de choses spécifiques à l'interface utilisateur comme le défilement à partir d'un code.

La solution est simple : il suffit de lier DataGrid.SelectedItem à une propriété du ViewModel et lors de l'ajout d'un nouvel élément dans la collection d'éléments, il suffit de mettre à jour une propriété liée à SelectedItem de manière à ce qu'il fasse référence à l'élément ajouté et que la grille de données sélectionne automatiquement la ligne appropriée.

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X