2009-05-14 11 views

Respuesta

49

El comando de relevo no existe en WPF, es solo una clase externa que se destacó después de que se definió en this MSDN article. Debe escribirlo usted mismo si quiere usarlo.

De lo contrario, puede obtener el comando Delegar del kit de herramientas WPF here que tiene un poco de funcionalidad adicional sobre el código RelayCommand.


Ah, la pregunta cambió mientras escribía esta respuesta. Suponiendo que está utilizando el RelayCommand como se define más arriba, debe proporcionar uno o dos delegados, uno que devuelva un bool que determine si el comando está en un estado válido para ejecutarse, y un segundo que no devuelve nada y realmente ejecuta el mando. Si no proporciona un delegado "CanRun", el comando considerará que siempre está en un estado válido. El código utilizado en el artículo:

RelayCommand _saveCommand; 
public ICommand SaveCommand 
{ 
    get 
    { 
     if (_saveCommand == null) 
     { 
      _saveCommand = new RelayCommand(param => this.Save(), 
       param => this.CanSave); 
     } 
     return _saveCommand; 
    } 
} 

Declara una RelayCommand que llamará al método Save() cuando se dispara y devolver la propiedad CanSave como una prueba para la validez. Cuando este comando está vinculado a un botón en WPF, la propiedad IsEnabled del Botón coincidirá con la propiedad CanSave del ViewModel y cuando se hace clic en el botón (suponiendo que esté habilitado) se llamará al método Save() en el ViewModel.

+1

Tenía una ventaja porque ayer lo busqué para esta respuesta: http://stackoverflow.com/questions/858268/in-mvvm-what-is-the-best-way- For-the-viewmodel-to-respond-to-user-actions-in-the/858303 # 858303 –

+3

Desearía que las muestras de los códigos de los artículos de MSDN no estuvieran mezcladas, ya hace meses que nadie conoce un espejo o algo que los muestra normales? –

+0

Existe un comando de retransmisión incorrecto/desactualizado, pero es una parte del https://mvvmlight.codeplex.com/ toolkit – MikeT

7

Como alternativa a la creación de envoltorios RelayCommand para todos sus métodos, puedo sugerir una biblioteca y una fuente gratuitas que le permitirán utilizar el enlace {BindTo Save()}. Lo creé para simplificar mis enlaces. También hace que la vinculación relativa sea mucho más fácil. Puede encontrarlo aquí: http://www.simplygoodcode.com/2012/08/simpler-wpf-binding.html

+2

Se ve muy bien, aunque no lo ha probado. Pero le sugiero que mejore la publicación del blog y explique los detalles de la implementación. Aunque publicar el código en Github sería muy agradable. Y también considere poner más (¡algunos!) Códigos en esta respuesta en StackOverflow. –

+0

+1 para la sugerencia de @ MD.Unicorn para publicar el código en GitHub (o similar). También podría ser bueno si la biblioteca estuviera disponible como paquete NuGet. –

Cuestiones relacionadas