2010-08-17 40 views
19

如何將我當前所在的窗口作爲參數傳遞給命令?將當前窗口作爲CommandParameter傳遞

我喜歡做這XAML的標記:

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

爲什麼?就我所知,XAML中沒有「這個」符號。另外,在這種情況下'this'可能是按鈕。你想做什麼? – 2010-08-17 15:59:40

+0

與-this-我的意思是包含Window對象。我把它寫在標題和文本中,我想通過窗口。作爲瑞秋和丹尼爾普拉特的答案顯示,其足夠清晰;) – SwissCoder 2010-08-17 20:45:01

回答

52

有我的認爲做這兩種方法:給窗口的名稱(通過x:Name屬性上Window標籤,然後構建一個結合這樣的(假設窗口的名稱是「ThisWindow」):

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

對於一些更普遍的(不依賴於給當前窗口的名稱),綁定可以構建這樣:

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

你能告訴我這是如何看起來像在viewmodel? – CeOnSql 2016-06-24 09:28:13

18

如果你想通過按鈕作爲參數,你可以嘗試綁定到的RelativeSource

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

如果你想通過窗口作爲一個參數:

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

謝謝瑞秋。我看着你和Daniel Pratt的解決方案。其實他們很相似。但我會將他標記爲答案,因爲我喜歡通過其名稱訪問窗口的想法。 – SwissCoder 2010-08-17 20:52:26

+0

當我嘗試使用'Button'作爲參數示例時,我得到'Specified Visual已經是另一個Visual的子節點或CompositionTarget的根節點。有任何想法嗎? – Maslow 2017-01-17 21:09:23

+0

發現這是因爲我試圖''通過'LinqPad'將'canExecute'中的按鈕'轉儲('),它將wpf顯示它 – Maslow 2017-01-17 21:15:31

1

在我的情況下,沒有提供的答案工作。

這爲我工作:

<window x:Name="myWindow"> 
<Button Command="Command" CommandParameter={x:Reference Name=myWindow}/> 
</window> 
相關問題