2013-03-07 17 views
9

Ich frage mich, wie Sie den XAML für die folgenden markieren. Ich habe ein Ansichtsmodell mit einem Objekt basierend auf ICommand.wpf Befehlsparameter von einem anderen Objekt

Ich habe ein Formular mit einem Textfeld und einer Schaltfläche. Die Schaltfläche ist über Command="{Binding MyButtonInViewModel}" mit dem Objekt ICommand verbunden.

Was ich tun möchte, ist die Schaltfläche CommandParameter gleich was im Text des Textfelds wie zum Beispiel eine "Suche" aufrufen, aber offensichtlich nicht wissen, wie Sie über Steuerelemente in der Ansicht haken.

Antwort

17

Der folgende XAML sollte funktionieren, um den Text aus der TextBox als Parameter an Ihren Befehl zu übergeben.

<TextBlock x:Name="searchBox" /> 

<Button Command="{Binding MyButtonInViewModel}" 
     CommandParameter="{Binding Text, ElementName=searchBox}"/> 
5

Sie können dies tun, indem Sie die ElementName in der Bindung festlegen. Hier ist ein Beispiel:

<TextBox x:Name="textBox"/> 
<Button Content="Button" 
     Command="{Binding ButtonCommand}" 
     CommandParameter="{Binding ElementName=textBox, Path=Text}"/> 
1

Wenn Sie das Textfeld selbst auf die Schaltfläche des Befehlsparameter, und nicht nur die Eigenschaft text des Textfelds binden, können Sie das Textfeld in der Ansicht Modell manipulieren zum Beispiel auf, klar die Texteigenschaft

<TextBox x:Name="searchBox" /> 

<Button Command="{Binding MyButtonInViewModel}" 
     CommandParameter="{Binding ElementName=searchBox}" /> 

Ansicht Model Code

private void SearchStuff(TextBox searchBox) 
{ 
    //do stuff with searchBox.Text 
    searchBox.Text = ""; 
} 

Vielleicht nicht so toll für dieses Beispiel, wo Sie wahrscheinlich der Suchtext wollen zusammen mit den Ergebnissen der Suche angezeigt zu bleiben. Besser für eine Protokollierungs- oder Messaging-App, bei der der Text beim Klicken auf die Schaltfläche "konsumiert" werden soll.

+0

Ich schätze Ihre Antwort, aber sehen Sie sich die Antworten an ... falls welche mit dem Häkchen versehen sind, bedeutet das, dass es gelöst ist. Das war vor fast einem Jahr und ich bin weit über diesen Punkt hinaus. – DRapp

+4

@DRAP: Antworten auf SO sind nicht nur für die Person, die die Frage stellte, sondern auch für den Rest der Gemeinschaft nützlich sein kann. Ob es eine gute Idee ist, mit UI von VM aus zu arbeiten, ist eine andere Frage. – nightcoder

Verwandte Themen