내 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는 명령에 실제로 약간의 수정을 가하는 것에 달려 있다고합니다. 나는 이것으로 모두 편안하지 않다. 더 좋은 방법이 있습니까?
MVVM 패턴을 사용하고있어 사용자가 옳은 것처럼 들립니다. 나는 그것을 지울 필요가있는 명령을 보유하고있는 동일한 ViewModel의 일부 속성에 텍스트 필드를 바인딩 할 것이다. 나는이 말이 합리적이라고 생각한다. 내일 가까이서 볼 것입니다. 감사! – stiank81
제발, 나는 그것이 당신을 도울 것이라고 확신합니다. –
당신은 절대적으로 옳습니다. 제안 된 것과 똑같지는 않았지만 본질적으로 ViewModel에 값을 저장하고 ViewModel에 저장된 값을 사용하도록 명령을 내리고 그 후에도 지 웁니다. 감사! – stiank81