2010-08-17 32 views
19

làm cách nào tôi có thể chuyển cửa sổ hiện tại tôi làm tham số cho lệnh?chuyển Cửa sổ hiện tại làm CommandParameter

Tôi muốn làm điều này trong XAML-đánh dấu:

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

Tại sao? Không có ký hiệu "này" trong XAML theo như tôi biết. Bên cạnh đó, 'this' trong trường hợp này có lẽ sẽ là nút. Bạn đang cố làm gì vậy? –

+0

với - tôi có nghĩa là đối tượng Window chứa. Tôi viết nó trong tiêu đề và trong văn bản, rằng tôi muốn vượt qua cửa sổ. Như các câu trả lời của Rachel và Daniel Pratt hiển thị, rõ ràng của nó đủ;) – SwissCoder

Trả lời

52

Có hai cách tôi có thể về suy nghĩ để làm điều này: Cung cấp cho cửa sổ một tên (thông qua một thuộc tính x:Name trên thẻ Window, và sau đó xây dựng một ràng buộc như thế này (giả định tên của cửa sổ là 'ThisWindow'):

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

Đối với một cái gì đó nhiều hơn nói chung (không dựa vào cho window hiện một tên), các ràng buộc có thể được xây dựng như thế này :

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

Bạn có thể vui lòng cho tôi thấy làm thế nào điều này có thể trông giống như trong viewmodel? – CeOnSql

18

Bạn có thể thử liên kết đến một RelativeSource

Nếu bạn muốn vượt qua các nút như một tham số:

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

Nếu bạn muốn vượt qua cửa sổ như một tham số:

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

Cảm ơn Rachel. Tôi đã xem xét các giải pháp của bạn và Daniel Pratt. Trên thực tế chúng khá giống nhau. Nhưng tôi sẽ đánh dấu câu trả lời của anh ấy, bởi vì tôi thích ý tưởng truy cập vào Cửa sổ thông qua tên của nó. – SwissCoder

+0

Tôi nhận được 'Specified Visual đã là một con của Visual khác hoặc gốc của một CompositionTarget.' khi tôi cố gắng sử dụng' Button' làm ví dụ tham số. bất kỳ ý tưởng? – Maslow

+0

phát hiện ra nó là bởi vì tôi đã cố gắng để '.Dump()' nút trong 'canExecute' qua' LinqPad' mà sẽ wpf hiển thị nó – Maslow

1

Trong trường hợp của tôi, không có câu trả lời nào được cung cấp.

này đã làm việc cho tôi:

<window x:Name="myWindow"> 
<Button Command="Command" CommandParameter={x:Reference Name=myWindow}/> 
</window> 
Các vấn đề liên quan