2011-09-27 20 views

Respuesta

4

Honestamente, ¿qué tienen en común el MVVM y el cuadro de texto numérico?

si desea un cuadro de texto numérico, crea un nuevo TextBox o AttachedProperty o un Behavior. Here es un ejemplo de comportamiento de MaskedTextbox para ver lo que quiero decir.

ahora a su parte de MVVM. supongo que quiere validar su entrada para que sea solo numérica. si su viewmodel tiene una propiedad de tipo int, entonces su enlace solo funciona si su vista tiene entrada que se puede convertir a int. de lo contrario, su modelo de vista nunca será informado. hay 2 formas ahora:

primero: asegúrese de que su vista solo puede tomar una entrada numérica (con su cuadro de texto numérico) y la propiedad viewmodel puede ser int.

o segundo: el tipo de propiedad de viewmodel es typeof string y utiliza IDataErrorInfo para que la vista se conozca cuando la entrada no es numérica.

+5

La razón por la que incluí MVVM es porque vi implementaciones en las que se usa el evento Preview Key en el código subyacente. Solo quiero eliminar esas respuestas – katie77

+0

@Blindmeis, ¿puedo tener traducción en esa jajaja? –

0

Bueno ... si desea que se le notifique en su modelo de vista cuando la propiedad de texto del cuadro de texto numérico cambie, solo conéctelo. Si la propiedad .Text del cuadro de texto numérico no es una propiedad de dependencia, ¡golpee el codificador!

éste: http://wpftoolkit.codeplex.com/wikipage?title=DecimalUpDown&referringTitle=Home

puedo recomendar y que puede unirse a él desde el modelo de vista a través de:

<!-- View: --> 
<NumericTextBox Text="{Binding MyViewModelTextStringProperty}" /> 
//ViewModel: 
public string MyViewModelTextStringProperty 
{ 
    get/set with NotifyPropertyChanged.... 
} 
1

Por la definición estándar de MVVM que no desea un modelo de vista detrás de una control personalizado Todo lo que debe hacer es extender el control TextBox y asegurarse de que solo se ingrese la entrada numérica. También debe agregar una DependencyProperty que devuelve la entrada numérica.

El ViewModel entrará cuando se use ese control en una ventana o en un control compuesto. Debería vincular el texto o la propiedad de dependencia numérica a una propiedad pública en su ViewModel.

0

Si realmente quisiera hacer esto en el ViewModel, tendría que hacer que su propiedad enlazada sea una cadena. Asegúrese de que el enlace se actualice con cada pulsación de tecla (usando el UpdateSourceTrigger).

En su setter, rechace los valores no numéricos mediante la generación de una excepción o el recorte de caracteres no numéricos. El último enfoque tiene el beneficio de trabajar para operaciones de copiar/pegar donde el texto pegado puede contener una combinación de dígitos y letras, pero solo los dígitos deben ser retenidos.

Dicho esto, estoy de acuerdo con otras sugerencias de que tener un control especializado que solo expone una propiedad numérica es un enfoque más limpio.

Saludos,

Eric.

4

En WPF si vincula el TextBox a una propiedad decimal o interna, aceptará solo ese int o decimal, de lo contrario mostrará un borde rojo que no tiene el valor adecuado en el enlace. Y si está hablando sobre el cuadro de texto de actualización numérica, entonces está disponible con el kit de herramientas WPF sobre here

Cuestiones relacionadas