TextBox.TextChanged&ICommandSource
-
09-06-2019 - |
문제
내가 다음 M V-VM 패턴 내 WPF UI.내가 좋아하는 명령을 TextChanged 이벤트의 텍스트 상자를 명령을 내 뷰 모델 클래스입니다.유일한 방법은 나의 생각할 수 있는 이 작업을 완료하는 상속에서 텍스트 상자를 제어 및 구현하 ICommandSource.그런 다음 지시하는 명령하여 발사되니다이것은 너무 많은 일을 위해 무언가가 그렇게 간단합니다.
이 있는 쉬운 방법(보다는 하위 클래스고 텍스트 상자에 구현 ICommandSource)연결하는 TextChanged 이벤트를 내 뷰 모델 class?
해결책
첫째,당신은 확실히려 두 방법으로 데이터 바인딩을,뷰 모델로 UpdateSourceTrigger 의 PropertyChanged?는 방법을 제공 setter 의 속성에 바인딩하는 것이라는 매 시간 텍스트가 변경되었나요?
는 경우에는 충분하지 않음 낚시 도구를 사용하여이 문제를 첨부 동작을 적용할 수 있습니다.에는 줄리안이즈의 블로그는 문서 하는 방법에 대해 뭔가 매우 비슷 Silverlight,해야에 쉽게 적응할 수 있 WPF.
기본적으로,개인정보취급방침(이라고 말 TextBoxBehaviours)정의된 재산이라는(아마도)TextChangedCommand 의 유형 ICommand.결 OnPropertyChanged 처리기는 시설 내에 핸들러를 확인하는 시간에 설정 텍스트 상자;는 경우에 그것은,핸들러를 추가하 TextChanged 이벤트에 텍스트 상자를 호출하는 명령어에서 지정한 시설을 제공합니다.
그런 다음,가정의 시점에 할당되었는 매핑되는 당신의보기에,당신은 것처럼 사용:
<TextBox
x:Name="MyTextBox"
TextBoxBehaviours.TextChangedCommand="{Binding ViewModelTextChangedCommand}" />
다른 팁
를 사용하는 이벤트는 바인딩 방법령되지 않을 수도 있 옳은 일을 사용합니다.정확히 무엇을 할 것 이 명령을 할까?
을 고려할 수 있습을 사용하여 데이터 바인딩하는 문자열 필드에서 당신의 VM.이 방법은 당신이 전화를 걸 수 있습니다 명령 또는 기능이 거기에서 보다는 오히려한 UI 다.
<TextBox Text="{Binding WorldName}"/>
....
public string WorldName
{
get
{
return WorldData.Name;
}
set
{
WorldData.Name = value;
OnPropertyChanged("WorldName");
// CallYourCustomFunctionHere();
}
}
수은 당신이 아니라 처리 TextChanged 이벤트와에서 명령을 실행가?
private void _textBox_TextChanged(object sender, EventArgs e)
{
MyCommand.Execute(null);
}
대체로서,당신이 말한 것을 만들기 TextBox
로 작동하는 명령 소스지 않는 것 같은 잔인하지 않는 한 그것은 무언가를 당신이 계획에서 공유 및 활용에서는 많은 장소입니다.