2010-08-17 7 views
19

현재 명령 매개 변수로 사용중인 창을 어떻게 통과시킬 수 있습니까?현재 창을 CommandParameter로 전달

나는 XAML 마크 업에서이 작업을 수행하려면 :

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

이유는 무엇입니까? 내가 아는 한 XAML에는 "이"표기법이 없습니다. 게다가,이 경우에는 'this'가 아마도 버튼 일 것입니다. 너 뭐하려고? –

+0

with this-this는 내가 포함 된 Window 객체를 의미합니다. 나는 제목과 텍스트에 글을 써서 창문을 통과시키고 싶다. Rachel과 Daniel Pratt의 답변으로, 충분히 명확합니다.) – SwissCoder

답변

52

내가이 일을 생각의 두 가지 방법이 있습니다 : 다음 Window 태그에 x:Name 속성을 통해 창에 이름을 (주고, 이 같은 바인딩을 구성 (윈도우의 이름을 가정하는 것은 'ThisWindow'이다) :

뭔가 더 일반적인 (현재 창에 이름을 부여에 의존하지 않는)에 대한
<Button Command="CommandGetsCalled" CommandParameter="{Binding ElementName=ThisWindow}" /> 

, 바인딩은 다음과 같이 구성 할 수있다 :

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

Viewmodel에서 어떻게 보일 수 있습니까? – CeOnSql

18

매개 변수로 버튼을 전달하려는 경우, 당신은 RelativeSource

에 바인딩을 시도 할 수 :

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

매개 변수로 창을 통과하려면 :

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

레이첼 감사합니다. 나는 너와 다니엘 프랫의 해결책을 보았다. 사실 그들은 꽤 비슷합니다. 그러나 저는 그 이름으로 창에 접근하는 아이디어가 마음에 들기 때문에 그의 답변으로 표시 할 것입니다. – SwissCoder

+0

'Button'을 매개 변수 예제로 사용하려고하면 '지정된 Visual이 이미 다른 Visual의 자식이거나 CompositionTarget의 루트입니다.'라는 메시지가 나타납니다. 어떤 아이디어? – Maslow

+0

그것이'canExecute'의 버튼을'LinqPad'를 통해'.Dump()'하려고했기 때문에 나온 것입니다. – Maslow

1

내 경우에는 제공된 답변 중 아무 것도 작동하지 않았습니다.

은 나를 위해 일한 :

<window x:Name="myWindow"> 
<Button Command="Command" CommandParameter={x:Reference Name=myWindow}/> 
</window> 
관련 문제