2010-02-08 5 views
1

내 WPF 응용 프로그램에는 TextBox와 단추가 있습니다. 버튼에는 텍스트를 사용하여 명령을 수행하는 명령이 있습니다.명령에서 UI 수정 - WPF에서 명령 바인딩 사용

<TextBox x:Name="_textBox"></TextBox> 
<Button Command="{Binding SomeCommand}" 
     CommandParameter="{Binding ElementName=_text, Path=Text}" 
     Content="Trigger SomeCommand" /> 

이제 TextBox를 지우려면 버튼을 클릭하는 동작이 필요합니다. 이 일을하는 가장 좋은 방법은 무엇입니까? 두 가지 옵션이 있습니다.

버튼에 Click 이벤트를 추가하여 텍스트를 지울 수 있습니다. 이것은 내가 올바른 행동을 취하는 순서에 의존하여 두 곳에서 행동을 나누기 때문에 나에게는 좋은 생각처럼 들리지 않습니다.

지금 사용했던 옵션은 TextBox.Text 속성 대신 전체 TextBox를 전달하는 것입니다. 이렇게하면 명령에서 먼저 텍스트를 가져 와서 사용하고 TextBox를 지울 수 있습니다. 내 바인딩은 동일하지만 "경로"없는 :

<TextBox x:Name="_textBox"></TextBox> 
<Button Command="{Binding SomeCommand}" 
     CommandParameter="{Binding ElementName=_text}" 
     Content="Trigger SomeCommand" /> 

그리고 내 명령의 필수 부품 :

public class SomeCommand : ICommand 
{ 
    .... 
    public void Execute(object parameter) 
     var textBox = parameter as TextBox; 
     if (inputTextBox == null) return; 
     DoSomething(textBox.Text); 
     textBox.Clear(); 
    } 
} 

이 나의 문제는 명령이 이제 UI 구성 요소에 의존한다는 것입니다, UI는 명령에 실제로 약간의 수정을 가하는 것에 달려 있다고합니다. 나는 이것으로 모두 편안하지 않다. 더 좋은 방법이 있습니까?

답변

2

Textbox 텍스트를 Command의 implementationaion 본문에서 사용 가능한 속성으로 바인딩하는 것을 고려하십시오. 이 바인딩을 사용하면 ViewModel에서 쉽게 지울 수 있습니다.

예 (XAML) :

<TextBox x:Name="_textBox" Text={Binding Path=XYZ}></TextBox> 
<Button Command="{Binding SomeCommand}" 
     Content="Trigger SomeCommand" /> 

예 (C#을) : 작동하는지

public class SomeCommand : ICommand 
    { 
     .... 

     public void Execute(object parameter) 
     { 
      //...actions... 
      MyViewModelinstance.XYZ = String.Empty; 
     } 
    } 

나에게 소리를주십시오.

편집 :가 명백해야한다 있도록, MVVM 디자인 패턴을 사용하고,하지만 난 단지의 경우를 생각 나게합니다 : XYZ를 변경 한 후이 속성이 변경되었는지, UI를 통지해야한다. 예를 들어, VM에 의해 INotifyPropertyChanged 인터페이스를 구현하여이를 수행 할 수 있습니다.

+0

MVVM 패턴을 사용하고있어 사용자가 옳은 것처럼 들립니다. 나는 그것을 지울 필요가있는 명령을 보유하고있는 동일한 ViewModel의 일부 속성에 텍스트 필드를 바인딩 할 것이다. 나는이 말이 합리적이라고 생각한다. 내일 가까이서 볼 것입니다. 감사! – stiank81

+0

제발, 나는 그것이 당신을 도울 것이라고 확신합니다. –

+0

당신은 절대적으로 옳습니다. 제안 된 것과 똑같지는 않았지만 본질적으로 ViewModel에 값을 저장하고 ViewModel에 저장된 값을 사용하도록 명령을 내리고 그 후에도 지 웁니다. 감사! – stiank81