2011-11-24 3 views
1

내 WPF 응용 프로그램에서 MVVM 패턴을 사용하는 것이 처음인데 이상한 상황에 빠졌습니다. 사실 StackOverflow에서 Metainputtextbox와 비슷한 것을 만들려고합니다 (새로운 질문을 작성할 때). (! DOH)WPF MVVM 데이터 바인딩 - 공간을 확인한 다음 체크 박스를 지우십시오.

내가 텍스트 상자를 내 뷰 모델의 속성에 바인딩 :

그래서 일을하려고 무엇을 메신저. 설정 속성에서 메신저에 공백이 있는지 확인 ('')하지만 공백이 아닌 경우 (즉 메타 워드가 있음을 의미) 공백에서 트리밍 한 다음 내 개인 속성에 저장합니다. 그리고 updateProp을 호출합니다. 이제 여기 까다로운 부분이 있습니다. metaword가 저장된 후에 문자열과 텍스트 상자를 지우고 싶지만 내 속성을 ""로 설정하면 물론 모든 것을 다시 트리거합니다.

XAML

<TextBox 
     Name="txtBoxMetaInput" 
     Text="{Binding Path=MetaInput, Mode=TwoWay, 
     UpdateSourceTrigger=PropertyChanged}"/> 

의 ViewModel 내가 텍스트 상자를 비우고 metaword 배열에 저장 한 후 property's을 취소 할 것인지가 지금 무슨 누락

private string metaInput { get; set; } 
    public string MetaInput 
    { 
     get { return metaInput; } 
     set 
     { 
      if (value.Contains(' ') && String.IsNullOrEmpty(value) == false) 
      { 
       metaInput = value.Trim(' '); 
       saveTheMetaKeyWordToAnArrayOfMetawords(); 
       this.OnPropertyChanged("MetaInput"); 
      } 
     } 
    } 

.

이 문제는 아마 그것에 눈의 새로운 세트를 필요로 :)

답변

1

지금 여기에 까다로운 부분 온다. metaword가 저장된 후에 문자열과 텍스트 상자를 지우고 싶지만 내 속성을 ""로 설정하면 물론 모든 것을 다시 트리거합니다.

속성이 아닌 (PropertyChanged를 발생시키기 전에) 배킹 필드를 설정하기 만하면됩니다. 이렇게하면 값의 "재 트리거"가 방지됩니다.

+0

안녕하세요. –

+0

Imean 그래, 그게 재산과 handeling 위해 일한다고 생각하지만 그것은 컨트롤을 업데이 트하지 않을거야 ... –

+0

@ user1057806 그것은 할 것입니다 - 당신이 완료되면 그 속성에 대한 PropertyChanged 인상 *. 지금 당장은 2 배로 효과적으로 올릴 수 있습니다. 컨트롤을 업데이트하기 위해 마지막에 한 번 올리기 만하면됩니다. –

0

가장 좋은 해결책은에 값 변환기를 사용하는 아마 인 그 string에서 다시 string[]과로 변환 바인딩 :

<local:TagConverter x:Key="TagConverter" /> 

<TextBox 
     Name="txtBoxMetaInput" 
     Text="{Binding Path=MetaInput, Mode=TwoWay, 
     UpdateSourceTrigger=PropertyChanged, Converter={StaticResource TagConverter}}"/> 

TagConverterIValueConverter를 구현하는 사용자가 작성하는 클래스입니다. 에 Convertstring에서 string[]로 변환, 공백에 분할. ConvertBack에서는 string[]string으로 다시 참여합니다.

+0

하지만 여전히 상자를 청소하지 않습니까? 나는 지저분한 부분이 실제로 매개 변수를 다시 null로 설정하고 텍스트 상자를 새 Null 값에 반응하게 만드는 값이 없다는 것을 의미합니다. –

+0

오, 태그 목록을 유지하는 대신 각 태그를 입력 한 후 텍스트 상자를 지우시겠습니까? – bruceboughton

관련 문제