2010-08-17 12 views
19

Wie kann ich das Fenster, in dem ich mich gerade befinde, als Parameter an einen Befehl übergeben?Übergabe des aktuellen Fensters als CommandParameter

Ich mag diese in XAML-Markup tun:

<Button Command="CommandGetsCalled" CommandParameter="-this?-" /> 
+0

Warum? Es gibt keine "diese" Notation in XAML, soweit ich weiß. Außerdem wäre 'das' in diesem Fall wahrscheinlich der Knopf. Was versuchst du zu machen? –

+0

mit -this- Ich meinte das umhüllende Window-Objekt. Ich schreibe es im Titel und im Text, dass ich das Fenster weitergeben möchte. Wie die Antworten von Rachel und Daniel Pratt zeigen, ist es klar genug;) – SwissCoder

Antwort

52

Es gibt zwei Möglichkeiten, die ich mir vorstellen kann, dies zu tun: Geben Sie dem Fenster einen Namen (über ein x:Name Attribut auf dem Window-Tag, und dann ein bindendes Konstrukt wie folgt aus (den Namen des Fensters wird davon ausgegangen ist ‚ThisWindow‘):

<Button Command="CommandGetsCalled" CommandParameter="{Binding ElementName=ThisWindow}" /> 

Für allgemeinere etwas (verlässt sich nicht um das aktuelle Fenster einen Namen zu geben), kann die Bindung wie folgt aufgebaut sein :

<Button Command="CommandGetsCalled" CommandParameter="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}}}" /> 
+1

Kannst du mir bitte zeigen, wie das im Viewmodel aussehen könnte? – CeOnSql

18

Sie könnten versuchen, Bindung an eine Relative

Wenn Sie den Knopf als Parameter übergeben möchten:

<Button Command="CommandGetsCalled" 
     CommandParameter="{Binding RelativeSource={RelativeSource Self}}" /> 

Wenn Sie das Fenster als Parameter übergeben möchten:

<Button Command="CommandGetsCalled" 
     CommandParameter="{Binding RelativeSource={ 
      RelativeSource AncestorType={x:Type Window}}}" /> 
+0

Danke Rachel. Ich schaute auf Ihre und Daniel Pratts Lösungen. Eigentlich sind sie sich ziemlich ähnlich. Aber ich werde seine Antwort als Antwort markieren, weil ich die Idee mag, über seinen Namen auf das Fenster zuzugreifen. – SwissCoder

+0

Ich bekomme "Specified Visual ist bereits ein Kind eines anderen Visual oder der Wurzel eines CompositionTarget." Wenn ich versuche, die 'Button' als Parameter Beispiel zu verwenden. irgendwelche Ideen? – Maslow

+0

herausgefunden, es ist, weil ich versucht habe .Dump() 'den Knopf in der' canExecute' über 'LinqPad', die es anzeigen würde – Maslow

1

In meiner Situation funktionierte keine der angegebenen Antworten.

Dieser arbeitete für mich:

<window x:Name="myWindow"> 
<Button Command="Command" CommandParameter={x:Reference Name=myWindow}/> 
</window> 
Verwandte Themen