2010-12-14 11 views
0

Ich habe ein WPF UserControl View/ViewModel-Paar erstellt: das View-XAML verarbeitet das Layout und die Bindungen und das ViewModel verarbeitet die Logik in Übereinstimmung mit den empfohlenen MVVM-MusterWie ein WPF-ViewModel/View UserControl als Steuerelement eingekapselt wird

Ich möchte in der Lage sein, dies als Kontrolle wieder zu verwenden.

Wie kann ich das ViewModel, das mit der Ansicht verknüpft ist, ausblenden/einkapseln, so dass ich das Steuerelement wie ein Standardsteuerelement verwenden kann [z. B. eine Schaltfläche]?

. Wie kann ich das Viewmodel des Steuerelements ausblenden?

Antwort

2

hängt davon ab, wie Sie die ViewModel-Klasse an das Steuerelement binden. , wenn Sie wie folgt vorgehen:

YourControl() 
{ 
    DataContex = new ViewModel(); 
} 

dann sehe ich keine Probleme. Fügen Sie einen Verweis auf Ihr Steuerelement hinzu und verwenden Sie es.

+0

Also lassen Sie uns sagen, dass meine Kontrolle besteht aus einem Text (Suchzeichenfolge) Box und einem Listenfeld. Die VM für das Steuerelement stellt 2 Sammlungen als Eigenschaften zur Verfügung - 1. die gesamte Liste der Elemente und 2. die Liste der Elemente, die mit der aktuellen Suchzeichenfolge übereinstimmen. Außerdem werden 2 Eigenschaften angezeigt: 1. für das ausgewählte Element, 2. für die Suchzeichenfolge. Der primäre Datenkontext für das Steuerelement ist seine eigene interne VM, die ich tun kann, wie oben vorgeschlagen, die Frage ist dann, wie "Zwischen" -Eigenschaften in der Ansicht verfügbar gemacht werden, damit diese Zwischeneigenschaften an Requisiten in der Elternansicht gebunden werden können . –

+1

Machen Sie "Zwischen" -Eigenschaften als Abhängigkeitseigenschaften (DP) Ihres Steuerelements (View-Klasse) und verwenden Sie sie in der übergeordneten Kontrolle wie jedes andere Steuerelement mit DP. – Arseny

0

Sie können Ihr ViewModel als StaticResource in Ihrem XAML erstellen. Das Problem beim Festlegen des DataContext auf Ihr ViewModel besteht darin, dass Sie nicht verwenden können, dass Sie Ihren DataContext nicht mehr aus dem Fenster oder der Seite, in der Sie das Steuerelement verwenden, verwenden können.

In XAML deklarieren Ihre Ansichtsmodell:

<myNS:MyViewModel x:Key="ViewModel /> 

Referenz Ihrer Ansicht nach Modell in Ihrem XAML:

<TextBlock Text="{Binding Source={StaticResource ViewModel}, Path=TextToBind}" /> 

im Code Behind Sie schnell zugreifen und initialisieren kann ich in der Regel eine Eigenschaft machen für einfache Referenz zu meinem View-Modell.

private MyViewModel viewModel 
{ 
    get { return this.Resources["ViewModel"] as MyViewModel; } 
} 
Verwandte Themen