Archiviazione e denominazione dei dati del registro

1

Sono in procinto di riscrivere una piccola applicazione dalla modalità console a una modalità GUI.

L'input è un file con dati di registro da un dispositivo di misurazione:

...
00029;00044;00076;00044;00021
00309;00032;00037;00000;65535
00013;00016;00008;00007;00005
...

Ogni riga di dati rappresenta 5 contatori che riassumono l'intervallo in cui la misura è scesa, ovvero la prima colonna è "< 40%", la seconda colonna è "[40-50 [", e così via ...

Prima riga come esempio:

29 counts below 40% | 44 counts between 40% and 60% | 76 counts between 60% and 80%
44 counts between 80% and 90% | 21 counts between 90% and 100%

Nell'applicazione console ho usato una matrice di numeri interi per memorizzare ogni riga di dati, inserendo ogni array di righe in una lista. Finora, tutto bene ... L'applicazione ha poi utilizzato un ciclo for per stampare i valori con le descrizioni alla console.

Il mio problema: volevo creare una GUI con WPF e applicare il databinding.

Ma ho un problema concettuale su come creare il binding dei dati per gli array di interi e elementi visivi.

Non ho avuto problemi con l'associazione dei dati a singole proprietà. La sfida è dovuta agli array.

Penso che dovrei creare una classe come questa (potrebbe anche essere usata come ViewModel):

public class CounterRecords
{
    public List<CounterRecord> DataRecords { get; set; }
}

Ma come devo andare sulla classe CounterRecord ?
Cos'è un'implementazione pulita / chiara di questo oggetto a cui posso legare?

public class CounterRecord
{
    public int Range40 { get; set; }
    public int Range40_60 { get; set; }
    public int Range60_80 { get; set; }
    public int Range80_90 { get; set; }
    public int Range90_100 { get; set; }
}
    
posta DeepCore 28.02.2013 - 13:21
fonte

1 risposta

2

Il livello Model dovrebbe riflettere i tuoi dati, quindi se i tuoi dati di registro rappresentano 5 valori separati che indicano un contatore di un intervallo, allora è come dovrebbe apparire Model .

Il tuo modello di dati CounterRecord mi sta bene, tuttavia alcuni aspetti da tenere in considerazione quando si utilizzano i sistemi di associazione dei dati di WPF sono:

  • Hai intenzione di modificare CounterRecord in fase di runtime e questa modifica deve riflettersi nell'interfaccia utente? In tal caso, devi implementare INotifyPropertyChanged sulla tua classe CounterRecord in modo che notifica l'interfaccia utente ogni volta che viene aggiornato

  • Stai modificando la raccolta di oggetti CounterRecord in fase di runtime e questa modifica deve riflettersi nell'interfaccia utente? In tal caso, ti consigliamo di utilizzare ObservableCollection anziché List<T> per gli stessi motivi

Per eseguire il binding a una raccolta anziché a una singola proprietà, ti consigliamo un controllo dell'interfaccia utente con una proprietà ItemsSource , ad esempio DataGrid o ItemsControl

<DataGrid ItemsSource="{Binding DataRecords}" />

o

<ItemsControl ItemsSource="{Binding DataRecords}" />

In sostanza, un'associazione ItemsSource eseguirà un ciclo attraverso la raccolta e creerà un elemento dell'interfaccia utente per ciascun elemento della raccolta. L'elemento dell'interfaccia utente potrebbe essere un DataGridRow , un TabItem , un ListBoxItem o anche un elemento personalizzato definito con ItemTemplate .

Se sei interessato, il mio blog ha una migliore spiegazione di un ItemsControl di MSDN, e probabilmente ti aiuterà a capire meglio il processo di associazione alle raccolte.

    
risposta data 28.02.2013 - 16:49
fonte

Leggi altre domande sui tag