2013-03-07 7 views
9

다음에 대해 XAML을 마크 업하는 방법이 궁금합니다. 나는 ICommand을 기반으로 한 객체를 가진 뷰 모델을 가지고 있습니다.다른 개체의 wpf 명령 매개 변수

텍스트 상자와 버튼이있는 양식이 있습니다. 버튼은 Command="{Binding MyButtonInViewModel}"을 통해 ICommand 개체에 연결됩니다.

내가 원하는 것은 단추의 CommandParameter을 "검색"을 호출하는 것과 같이 텍스트 상자의 텍스트와 동일하게 설정하지만보기의 컨트롤을 연결하는 방법을 분명히 알지 못합니다.

답변

17

다음 XAML은 TextBox의 텍스트를 매개 변수로 명령에 전달해야합니다.

<TextBlock x:Name="searchBox" /> 

<Button Command="{Binding MyButtonInViewModel}" 
     CommandParameter="{Binding Text, ElementName=searchBox}"/> 
5

바인딩에 ElementName을 설정하면됩니다. 버튼의 명령 매개 변수에 텍스트 상자 자체와 텍스트 상자의뿐만 아니라 텍스트 속성을 결합하면

<TextBox x:Name="textBox"/> 
<Button Content="Button" 
     Command="{Binding ButtonCommand}" 
     CommandParameter="{Binding ElementName=textBox, Path=Text}"/> 
1

, 당신은 예를 들어, 명확로보기 모델의 텍스트 상자를 조작 할 수 있습니다 : 다음은 예입니다 텍스트 프로퍼티.

<TextBox x:Name="searchBox" /> 

<Button Command="{Binding MyButtonInViewModel}" 
     CommandParameter="{Binding ElementName=searchBox}" /> 

보기 모델 코드

private void SearchStuff(TextBox searchBox) 
{ 
    //do stuff with searchBox.Text 
    searchBox.Text = ""; 
} 

당신은 아마 검색 텍스트는 검색 결과와 함께 표시 상태를 유지하려면이 예에 대한 어쩌면 좋은하지. 버튼을 클릭 할 때 텍스트를 '사용'하려는 로깅 또는 메시징 앱의 경우 더 좋습니다.

+0

답을 고맙게 생각하지만 답변을 살펴보십시오 ... 체크 표시가있는 경우 문제가 해결되었음을 의미합니다. 이것은 거의 1 년 전이었고이 항목을 넘어서는 길입니다. – DRapp

+4

@DRapp : SO에 대한 답변은 질문을 한 사람에게만 해당되는 것이 아니라 나머지 커뮤니티에도 유용 할 수 있습니다. VM에서 UI로 작업하는 것이 좋은지 아닌지는 또 하나의 질문입니다. – nightcoder