WPF DataGrid / ListView esegui il bind su array mvvm

Supponiamo che tu abbia

  • una matrice di N interi
  • un valore intero che rappresenta il numero di righe

nel modello. Il numero intero è associato a un ComboBox nella vista.

D1) Come si associa l’array (oi singoli elementi dell’array) a un controllo DataGrid o ListView in modo che:

  • quando si modifica il valore di ComboBox, solo molte righe sono visibili / generate in DataGrid o ListView
  • Le singole righe di DataGrid o ListView contengono TextBox (o simili) che consentono di modificare il valore corrispondente nella matrice. L’associazione deve essere bidirezionale.

Ad esempio, se seleziono 5 nel ComboBox, sono visibili solo 5 righe contenenti 5 TextBox ciascuno associato ai primi 5 elementi dell’array.

D2) Come fornire un’altra colonna (solo informazioni di testo) a DataGrid / ListView in modo che:

  • La prima riga avrebbe sempre letto 0. Ogni riga successiva avrebbe letto: ‘riga precedente’ + ‘360 diviso per valore selezionato di ComboBox’ (a condizione che fosse limitato ai numeri pari per semplicità).

Qualsiasi aiuto o suggerimento è molto apprezzato.
Grazie.

EDIT (22.11.2013):
Seguendo i suggerimenti di Sheridan collego questa domanda alla mia altra domanda che ha più informazioni (e contesto) a questa domanda.

Inizialmente ho aperto questa domanda perché pensavo che una domanda ridotta a qualsiasi contesto solo per la meccanica grezza avrebbe ottenuto una migliore comprensione e una migliore possibilità di risposta.
Sono corretto.

Ok, quindi se lo farai correttamente, dovrai prima creare un tipo di dati / class del modello per conservare i tuoi dati. Dovrebbe implementare correttamente l’ interfaccia INotifyPropertyChanged e contenere una proprietà per ogni colonna che si desidera visualizzare nel DataGrid inclusa una extra per il requisito ‘Q2’ .

Successivamente, si desidera aggiungere due proprietà di tipo ObservableCollection nel codice dietro / visualizza modello. Il primo manterrà l’intera collezione e il secondo mostrerà solo il numero di righe che desideri. Avrai anche bisogno di una proprietà integer per Bind all’elemento selezionato del ComboBox :

  ...  

Ora, ogni volta che la proprietà SelectedItem cambia nel modello di visualizzazione, è sufficiente aggiornare il numero di righe di elementi nella proprietà FilteredItems :

 public int SelectedItem { get { return selectedItem; } set { selectedItem = value; NotifyPropertyChanged("SelectedItem"); UpdateFilteredItems(); } } ... private void UpdateFilteredItems() { FilteredItems = new ObservableCollection(Items.Take(SelectedItem)); } 

Nel metodo UpdateFilteredItems , prendiamo semplicemente il numero rilevante di elementi dall’intera collezione di Items base al valore SelectedItem . Poiché la raccolta FilteredItems è associata a DataGrid.ItemsSource , l’interfaccia utente verrà automaticamente aggiornata.