передавая текущее окно как CommandParameter - PullRequest
23 голосов
/ 17 августа 2010

как я могу передать окно, в котором я сейчас работаю, как параметр для команды?

Мне нравится делать это в XAML-разметке:

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

Ответы [ 3 ]

63 голосов
/ 17 августа 2010

Есть два способа сделать это: дать окну имя (с помощью атрибута x:Name в теге Window, а затем создать привязку, подобную этой (предполагается, что имя окна равно ThisWindow '):

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

Для чего-то более общего (не полагаясь на присвоение имени текущему окну), привязка может быть построена так:

<Button Command="CommandGetsCalled" CommandParameter="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}}}" /> 
20 голосов
/ 17 августа 2010

Вы можете попробовать привязку к RelativeSource

Если вы хотите передать кнопку в качестве параметра:

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

Если вы хотите передать Window в качестве параметра:

<Button Command="CommandGetsCalled" 
        CommandParameter="{Binding RelativeSource={
             RelativeSource AncestorType={x:Type Window}}}" />
2 голосов
/ 20 декабря 2017

В моей ситуации ни один из предоставленных ответов не сработал.

Это сработало для меня:

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