Domanda

Ho guardato e non riesco a trovare quello che sto cercando. Ho un ambiente MVVM. Sul modello Visualizza, ho un dati disponibile dai dati da una connessione/query di database. Ho esposto una proprietà (getter/setter) come "dataview" basato su "thetable.defaultview".

Ho un datagrid nella finestra che si lega a DataView ... nessun problema.

<DataGrid AutoGenerateColumns="False" 
   Name="dataMyData"
   ItemsSource="{Binding Path=ViewModelViewProperty, 
   NotifyOnSourceUpdated=True, 
   NotifyOnTargetUpdated=True}"
   SelectedItem="{Binding Path=JustOneRecordInView, Mode=TwoWay}"
   SelectionMode="Single"
   SelectionUnit="FullRow"
   GridLinesVisibility="Horizontal"
   CanUserDeleteRows="False"
   CanUserAddRows="False" >

Per il "SelectedItem" sopra, viene anche da una proprietà esposta sul ViewModel tramite il suo (getter/setter).

Ora, il mio problema. Mentre scorro verso il basso l'elenco dei record nella griglia dei dati, ho altri controlli di testo per mostrare più dati rispetto al semplice elenco della griglia. Voglio essere in grado di modificare i dati di "The Current Row", quindi ho una casella di testo con tutte le impostazioni che riesco a pensare, ma qualcosa non va ancora.

<TextBox 
   Text="{Binding Path=PropertyForCurrentRecord[SpecificColumnInDataViewRow], 
        Mode=TwoWay, 
        UpdateSourceTrigger=PropertyChanged, 
        ValidatesOnDataErrors=True, 
        ValidatesOnExceptions=True,
        BindsDirectlyToSource=True,
        NotifyOnSourceUpdated=True,
        NotifyOnTargetUpdated=True,
        NotifyOnValidationError=True}"
    Name="textBox1" VerticalAlignment="Top" Width="40" />

Se faccio scorta e mi trovo in una modalità di modifica dei dati e cambio il valore nella casella di testo associata alla riga corrente e questo valore è una delle colonne visualizzate nella griglia, il datagrid stesso non mostra il valore modificato . Tuttavia, se continuo a scorrere e tornando sullo stesso record, il valore nella casella di testo mostra il valore modificato in valore.

Quindi, come posso forzare che l'origine dati della griglia sia considerata anche aggiornata poiché la singola colonna della riga specifica è cambiata e anche la griglia stessa aggiornata. Grazie...

È stato utile?

Soluzione 2

Wow ... Dopo un mucchio più scavato dai giorni precedenti, l'ho finalmente rotto ed ecco come l'ho risolto.

private bool AcceptingTheChanges = false;
private DataRowView myRecord;
public DataRowView MyRecord
{
   get { return myRecord; }
   set {
          if (myRecord != null)
                myRecord.Row.Table.AcceptChanges();

          // Now, get the incoming value and re-store into private
          myRecord = value;
          // Finally, raise event that it changed to refresh window...
          RaisePropertyChanged("MyRecord");
       }
}

Altri suggerimenti

Il tuo datagrid è associato a una raccolta di alcuni elementi di tipo a qualche tipo. Per svolgere il tuo compito è necessario implementare inotifyproperty -changed in qualche volta (o ereditare da ViewModelBase se lo hai). Puoi dare un'occhiata a un buon campione qui: http://www.hightech.ir/seesharp/best-implementation-of-inefypropertychange-ever

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top