Pregunta

Miré y no puedo encontrar lo que estoy buscando. Tengo un entorno MVVM. En el modelo View, tengo un datos disponibles desde los datos de una conexión/consulta de base de datos. He expuesto una propiedad (Getter/Setter) como un "DataView" basado en "thetable.defaultView".

Tengo un DataGrid en la ventana que se une a DataView ... no hay 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" >

Para el "SelectedItem" anterior, también proviene de una propiedad expuesta en ViewModel a través de su (Getter/Setter).

Ahora, mi problema. A medida que desplieto la lista de registros en la cuadrícula de datos, tengo otros controles de cuadros de texto para mostrar más datos de los que proporciona solo la lista de la red. Quiero poder editar los datos de "la fila actual", por lo que tengo un cuadro de texto con tantas configuraciones como puedo pensar, pero algo todavía está mal.

<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" />

Sin embargo, si me desplazo y estoy en un modo de edición de los datos, y cambio el valor en el cuadro de texto asociado con la fila actual, y este valor es una de las columnas que se muestran en la cuadrícula, el dataGrid en sí no muestra el valor cambiado . Sin embargo, si sigo desplazándome y de regreso en el mismo registro, el valor en el cuadro de texto muestra el valor cambiado.

Entonces, ¿cómo puedo forzar que la fuente de datos de la cuadrícula también se considera actualizada ya que la columna individual de la fila específica ha cambiado y la cuadrícula en sí misma también se actualizó? Gracias...

¿Fue útil?

Solución 2

Wow ... después de un montón más cavando de los días anteriores, finalmente lo descifré y así es como lo arreglé.

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

Otros consejos

Su DataGrid está vinculado a una colección de algunos elementos de tipo en algún tipo. Para realizar su tarea, debe implementar inotifypropertychange en el tipo (o heredar desde ViewModelBase si lo tiene). Puede echar un vistazo a una buena muestra aquí: http://www.hightech.ir/seesharp/best-implementation-of-inotifypropertychange-enter

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top