mit ChuckJ Zustimmen - in der Regel die Domaincontext Teil einer Ansicht Modell bildet. Angenommen, ich hätte eine Suchseite, auf der nach einem Produktkatalog gesucht werden kann. Hier ist, wie ich die Dinge strukturieren würde:
Auf dem Server:
class Catalog : DomainService {
IQueryable<Product> GetProducts(string keyword) { ... }
}
Die erzeugte Domaincontext:
class Catalog : DomainContext {
EntityList<Product> Products { get; }
void LoadProducts(string keyword);
}
Die Ansicht Modell, das ich schreiben würde:
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);
}
}
Und Dann würde ich schließlich in meinem XAML den DataContext meines UserControls als eine Instanz von SearchViewModel definieren und ein ItemsContr binden ol zu der Ergebniseigenschaft. Ich würde das ViewModel-Muster Ihrer Wahl verwenden, um einen Button-Klick an Search zu binden (was effektiv ein Befehl ist, den SearchViewModel verfügbar macht). Ich mag persönlich etwas, das ich mit Silverlight.FX wie in der Arbeit:
<Button Content="Search"
fxui:Interaction.ClickAction="$model.Search(keywordTextBox.Text)" />
und wie anfangs here gezeigt.
Wie Chuck erwähnt, könnte ich tatsächlich anderen Zustand in meinem Ansichtsmodell haben, zum Beispiel das SelectedProduct, das an das SelectedItem einer ListBox in meinem xaml bidirektional gebunden sein kann, und dann dasselbe SelectedProduct binden wie der DataContext von ein DataForm, um Details eines ausgewählten Produkts anzuzeigen.
Hoffe, dass hilft! Ich werde bald darüber mehr über meine blog bloggen.
Nach einigem Nachdenken über die vergangene Woche denke ich, dass ich daran denke. Der DomianContext ist nicht das komplette ViewModel, sondern ein Teil davon.Werden die im MetadataType des DomainService definierten Attribute (wie [Required]) im ViewModel neu deklariert oder ist der DomainContext Teil des ViewModel genug, um von der Validierungsmaschine aufgenommen zu werden? –
Link zu Nikhils Blogbeitrag zum Thema: http://www.nikhilk.net/Entry.aspx?id=229 –
Die Metadatenattribute [Erforderlich] usw. befinden sich in den Entitätstypen - nicht im Ansichtsmodell selbst. Sie werden abgeholt, wenn Sie eine Instanz der Entität aus dem Ansichtsmodell verfügbar machen (z. B. Produkte im obigen Beispiel des Ansichtsmodells). –