Acabo de comenzar a experimentar con Laurent Bugnion's MVVM Light Toolkit. Creo que realmente me va a gustar, pero tengo un par de preguntas.MVVM Light Toolkit - RelayCommands, DelegateCommands, y ObservableObjects
Antes de que llegue a ellos, déjenme explicar de dónde vengo. Actualmente uso una combinación de MVVM Foundation de Josh Smith y otro proyecto en Codeplex llamado MVVM Toolkit. Yo uso ObservableObject
y Messenger
de MVVM Foundation y DelegateCommand
y CommandReference
de MVVM Toolkit.
El único solapamiento real entre Fundación MVVM y MVVM Tookit es que los dos tienen una implementación para ICommand
: Fundación MVVM tiene RelayCommand
y MVVM Tookit tiene DelegateCommand
. De estos dos, DelegateCommand
parece ser más sofisticado. Emplea un CommandManagerHelper
que utiliza referencias débiles para evitar fugas de memoria.
Con eso dicho, aquí están mis preguntas:
¿Por qué utiliza MVVM Light
RelayCommand
en lugar deDelegateCommand
? ¿El uso de referencias débiles en unICommand
es innecesario o no recomendado por alguna razón?¿Por qué no hay
ObservableObject
en MVVM Light?ObservableObject
es básicamente la parte deViewModelBase
que implementaINotifyPropertyChanged
, pero es muy conveniente tener como una clase separada porque los modelos de vista no son los únicos objetos que necesitan implementarINotifyPropertyChanged
. Por ejemplo, supongamos que tiene un DataGrid que se une a una lista de objetosPerson
. Si alguna de las propiedades enPerson
puede cambiar mientras el usuario está viendo DataGrid,Person
necesitaría implementarINotifyPropertyChanged
. (Me doy cuenta de que siPerson
se genera automáticamente usando algo como LinqToSql, probablemente ya implementeINotifyPropertyChanged
, pero hay casos en los que necesito hacer versiones específicas de vista de objetos del modelo de entidad, por ejemplo, porque necesito incluir un comando para admite una columna de botón en un DataGrid).
Gracias.
P.S. Aquí está el código para DelegateCommand
del MVVM Toolkit:
https://docs.google.com/document/pub?id=1ApCx5SbCfHi5fBhv8Ki3zA6j34sp2t80LQZdj89v8cU
'ObservableObject' se ha implementado también ahora. – devuxer