Si tengo un formulario de datos, ¿cómo sé si un usuario lo ha modificado (ya sea escribiendo texto en un cuadro de texto o seleccionando un elemento en un cuadro combinado)? Intenté conectarme al evento "TextChanged" de mi cuadro de texto, pero el problema es que, cuando mi formulario participa en el enlace de datos, el evento "TextChanged" se dispara y marca prematuramente mi formulario como "sucio".¿Cómo puedo marcar un formulario/campo como "sucio" si está enlazado a datos?
Respuesta
intento implementar
public partial class Window1 : INotifyPropertyChanged
y luego
public event PropertyChangedEventHandler PropertyChanged;
public string UserName
{
get { return _UserName; }
set { if (value != _UserName)
{
_UserName = value;
OnNotifyPropertyChanged("UserName");
}}
}
private void OnNotifyPropertyChanged(string property)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(property));
}
y databind como
<TextBox Text="{Binding UserName}"/>
La primera vez que visualiza la página, almacena los valores del formulario en una matriz, cuando se activa el evento TextChanged, compáralo con lo que ya tienes, si es diferente.
¿Su clase de modelo implementa INotifyPropertyChanged
? De ser así, podría agregar un controlador para el evento PropertyChanged
en la clase y observar si la propiedad en cuestión cambia.
Si no ha implementado INotifyPropertyChanged
, ¿tal vez el mecanismo que está utilizando para notificar a la capa de interfaz de usuario de las actualizaciones podría utilizarse aquí también?
->http://www.mishainthecloud.com/2009/07/simple-dirty-tracking-for-winforms-in-c.html.
Sé que es un poco tarde, pero me gusta este enfoque :) Bondad encapsulada.
Después de enlazar los controles, llame a SetAsClean(). Esta llamada al método probablemente podría encapsularse en la misma clase de seguimiento sucio al manejar algunos de los eventos de BindingSources.
No creo que esto se aplique a WPF. –
- 1. grails - dime si algo está sucio?
- 2. Identificación de si el registro/objeto está sucio en Rails
- 3. ¿Cómo marcar un conjunto .net como seguro?
- 4. Marcar datos como sensibles en python
- 5. ¿Cómo puedo marcar el código de Perl como obsoleto?
- 6. Aviso Lisp: xx no está declarado ni enlazado, se tratará como si hubiera sido declarado ESPECIAL
- 7. ¿Cómo puedo probar si R se está ejecutando como Rscript?
- 8. ¿Cómo un EditorPart sucio prohíbe a Eclipse renombrar su recurso?
- 9. ¿Puedo marcar un control remoto GIT como de solo lectura?
- 10. ¿Cómo puedo marcar una propiedad como obsoleta en Delphi?
- 11. ¿Cómo puedo consumir eventos de un objeto COM enlazado tarde?
- 12. android: ¿cómo puedo marcar mi aplicación como depurable?
- 13. Enlazado a un campo const en Silverlight
- 14. Android: cómo marcar sms como leído enRecibir
- 15. Marcar como obsoleto
- 16. ¿Cómo puedo verificar si un JSON está vacío en NodeJS?
- 17. ¿Cómo declarar o marcar un método Java como obsoleto?
- 18. Hg: Cómo marcar un conjunto de cambios como 'estable'
- 19. ¿Cómo puedo forzar a Aero a dibujar una ventana sin bordes como si estuviera activa, incluso si no lo está?
- 20. ¿Cómo marcar una clase como Deprecated?
- 21. Cómo marcar un parámetro de interruptor como obligatorio en Powershell
- 22. ComboBox WPF enlazado a datos con opciones definidas en XAML?
- 23. ¿Cómo puedo verificar si PHP ya está conectado a una base de datos?
- 24. ¿Cómo puedo detectar si Dispatcher.DisableProcessing está activo?
- 25. ¿Puedo marcar una función como obsoleta en Scala?
- 26. Triple Quotes? ¿Cómo delimito un parámetro de cadena de Javascript enlazado a datos en ASP.NET?
- 27. ¿Puedo marcar un campo inválido desde javascript?
- 28. Cómo marcar un determinado archivo S3 como Hacer público
- 29. EGit que muestra el directorio como siempre sucio
- 30. ¿Cómo puedo verificar si actualmente se está visualizando un UIViewController?
Mejora mínima: puede reducir la anidación haciendo en su lugar: if (value == _UserName) return; Reduce un poco el desorden visual. –