Così i principi fondamentali: Ho una finestra con un controllo ListView su di esso, che è popolata da DataContext di mia griglia:ListView Binding con DataTable, non aggiornare dopo l'eliminazione di fila
mainGrid.SetBinding(Grid.DataContextProperty,
new Binding() {
Source = new DataView()
{ Table = SQLHandler.GetHandler[classType.ToString()] }
}
);
in XAML:
<ListView Grid.Row="1" Grid.Column="1" Grid.ColumnSpan="2" ItemsSource="{Binding}">
tutto funziona correttamente, è popolato. Come puoi vedere sopra, ho una classe SQLHandler a cui si può accedere Singleton, e posso accedere alle mie tabelle con un indicizzatore.
Il problema: la finestra si carica, sto selezionando una riga, facendo clic sul pulsante Modifica, la nuova finestra si carica, dove ottengo i dettagli della riga selezionata. quando cancello questa riga tramite questa nuova finestra e la chiudo, la finestra principale (dove viene mostrato il datatable completo) non viene aggiornata di conseguenza. so quale dovrebbe essere la soluzione, ma non riesco a farlo funzionare. (inotifyproperty ha cambiato l'interfaccia in classe SqlHandler, Binding.IndexerName ecc.)
ecco la cosa principale: il set di dati non è nella mia classe SqlHandler, è in SqlExecuter, dove vengono eseguiti tutti i miei sqlcommands.
public override DataTable this[string key]
{
get
{
if (sqlExecuter.GetDataSet.Tables.Contains(key))
return sqlExecuter.GetDataSet.Tables[key];
throw new KeyNotFoundException("The specified key was not found");
}
}
dove getDataSet è:
public DataSet GetDataSet
{
get { return ds; }
}
Come posso fare questo lavoro? Quando elimino una riga in una finestra diversa e chiudo quella, la listview della finestra principale non si aggiorna da sola. L'unica opzione che ho è di mettere un pulsante di aggiornamento, e quindi ricollegare la proprietà datacontext, quindi ovviamente funziona, ma il mio obiettivo è avere un sistema di aggiornamento "live", ecco perché Binding è dopotutto.
Cosa ho provato: GetDataSet in SqlExecuter: ha implementato l'interfaccia inotifypropertychanged, ma non è cambiato nulla. e non posso avere implementato un'implementazione modificata sul mio indicizzatore in SqlHandler, perché non ha un setter, sto semplicemente accedendo alle tabelle da code-behind, il mio sqldataadapter le sta popolando (metodo Fill)
ps : non ho intenzione di creare una ObservableCollection, perché il 90% del mio codice dovrebbe essere riscritto e quando cancellerò una riga, cancellerò il mio set di dati e lo riempirò di nuovo, quindi non mi aspetto nemmeno che noterà ogni cambiamento , proprio quando ho riempire il mio datatable, la mia ListView dovrebbe sapere su di esso .. e aggiornare se stesso