De acuerdo con ChuckJ: en general, el DomainContext forma parte de un modelo de vista. Por ejemplo, supongamos que tengo una página de búsqueda que permite buscar en un catálogo de productos. Aquí es cómo me estructuro cosas:
En el servidor:
class Catalog : DomainService {
IQueryable<Product> GetProducts(string keyword) { ... }
}
El DomainContext generada:
class Catalog : DomainContext {
EntityList<Product> Products { get; }
void LoadProducts(string keyword);
}
El modelo de vista que iba a escribir:
class SearchViewModel {
Catalog _catalog = new Catalog();
public IEnumerable<Product> Results {
get { return _catalog.Products; }
}
public void Search(string keyword) {
_catalog.Products.Clear();
_catalog.LoadProducts(keyword);
}
}
Y luego, finalmente en mi xaml, establecí el DataContext de UserControl para que fuera una instancia de SearchViewModel y uniera un ItemsContr ol a la propiedad Results. Usaría el patrón de ViewModel de su elección para vincular un botón, haga clic en Buscar (que es efectivamente un comando que SearchViewModel expone). Personalmente, me gusta algo que he trabajo con Silverlight.FX como en:
<Button Content="Search"
fxui:Interaction.ClickAction="$model.Search(keywordTextBox.Text)" />
y como se muestra inicialmente here.
Como Chuck menciona que podría tener otro estado en mi modelo de vista, por ejemplo, elProducto Seleccionado que podría estar enlazado bidireccionalmente al Elemento Seleccionado de un ListBox en mi xaml, y enlazar el mismoProducto Seleccionado como el DataContext de un DataForm para mostrar detalles de un producto seleccionado.
Espero que ayude! Estaré blogueando sobre esto un poco más en mi blog pronto.
Después de pensar en la semana pasada, creo que esto es lo que estaba pensando. DomianContext no es el ViewModel completo sino parte de él.¿Los atributos definidos en el MetadataType del DomainService (como [Obligatorio]) tienen que redeclararse en el ViewModel o el hecho de que DomainContext es parte del ViewModel lo suficiente como para ser recogido por el motor de validación? –
Enlace al blog de Nikhil del tema: http://www.nikhilk.net/Entry.aspx?id=229 –
Los atributos de metadatos [Obligatorio] etc. están en los tipos de entidad, no en el modelo de vista en sí. Se recogerán si expone una instancia de la entidad del modelo de vista (por ejemplo, Productos en el ejemplo del modelo de vista anterior). –