remarks - propiedad tag c#
MĂ©todos de Micro Guard de Caliburn que no evalĂșan el cambio de propiedad (3)
Estoy asumiendo que estos se llaman a través de un Command
(algo de código en torno a lo que se llama esos métodos ayudaría).
Si el caso que tiene es que desea que los comandos se vuelvan a evaluar en función de alguna entrada, debe invocar CommandManager.InvalidateRequerySuggested()
para que se CanExecute
los comandos CanExecute
. Dado que el comando está vinculado al botón y no al cuadro de texto, no se actualizará. En su establecedor de propiedades (el que está vinculado al cuadro de texto) debe indicar al marco que vuelva a consultar los comandos. Esto a su vez llamará a su método CanCalculate
.
Si los métodos Calcular y CanCalculate no están asociados con un comando, lo anterior no ayudará.
He estado jugando con el framework Caliburn Micro MVVM y estoy teniendo algunos problemas con los métodos de guardia.
Tengo un modelo de vista:
public class MyViewModel : PropertyChangedBase, IMyViewModel
Una propiedad:
public DateTime? Date
{
get{return this.date; }
set
{
this.date = value;
this.NotifyOfPropertyChange(() => Date);
}
}
Además, tengo un método en mi modelo de vista con un método de protección
public void Calculate()
{
// ..some code..
}
public bool CanCalculate()
{
return this.Date.HasValue;
}
Y un botón en mi opinión:
El problema que tengo es que el método CanCalculate se ejecuta al cargar, pero cuando ingreso valores en los campos de texto, no vuelve a evaluar el método CanCalculate. Estoy activando el evento de cambio de propiedad al configurar las propiedades del modelo de vista de base de datos, ¿cuál podría ser el problema?
Ok, lo he descubierto. No me di cuenta de que tenía que disparar la notificación del método de guardia, pensé que el marco lo hizo, pero tiene sentido.
Así que cambio mi establecedor de propiedades a:
public DateTime? Date
{
get
{
return this.date;
}
set
{
this.date = value;
this.NotifyOfPropertyChange(() => Date);
this.NotifyOfPropertyChange(() => CanCalculate);
}
}
y cambié mi método CanCalculate
a una propiedad:
public bool CanCalculate
{
get
{
return this.Date.HasValue;
}
}
Y todo funciona bien ahora :)
Si no necesita que CanExecute sea un método, porque no usará parámetros. Luego, puede reescribirlo como propiedad con notificación estándar y solo getter. Y llama a su PropertyChanged cuando supongas que el resultado del getter ha cambiado.