2014-05-14 3 views
-1

사용자 입력 (마우스 또는 키보드와 상호 작용)에 의해 컨트롤의 값이 변경되는 시점을 어떻게 알 수 있습니까?값이 입력을 통해 변경 되었습니까?

제안 사항? 이것에 공통적 인 방법이 있습니까?

편집 : 연결된 속성을 추구 이미 주어진 컨트롤을 확장하거나 어떤 사용자 입력이 변경되는 시간 값에서 일어나고 여부를 통보받을 단지 필요하고

. 예 : ComboBox SelectedItem이 사용자 입력에 의해 변경되었습니다 (사용자가 텍스트를 입력하거나 드롭 다운 메뉴에서 항목을 선택할 수 있음)

순수한 View 항목이므로 죄송 합니다만이 문제에 대한 ViewModel 솔루션은 허용되지 않습니다.

+0

당신은 더 정밀도를 제공 할 수 있습니까? 무효 코드를 어디에 추가 하시겠습니까? 어떤 종류의 행동을 소개하고 싶습니까? 이론 상으로는 컨트롤 자체에서 그러한 논리를 처리 할 필요가 없습니다. – jeromerg

+0

편집을 살펴 보았습니다 –

+0

이 작업을 위해 WPF 사용자 정의 컨트롤을 작성할 계획입니까? 또는 사용자 정의 컨트롤? 아니면 일반적으로 컨트롤에 대해 묻고 있습니까? –

답변

0

간단한 방법은 단순히 UI 측이 업데이트 될 때 (Binding.SourceUpdated는 뷰 모델 측 갱신 될 때 연소되는 동안) 소성 된 Binding.TargetUpdated 이벤트

+0

나는 그것을 사용할 수 없다고 생각한다. 바인딩이 항상 존재하는 것은 아닙니다. Text 속성을 바인딩하지 않고 TextBox를 사용할 수 있습니다. –

+2

글쎄, "ViewModel에서 변경 한 값"과 "사용자 입력에서 값을 변경했습니다"사이의 차이가 필요합니다. 따라서 View를 ViewModel에 바인딩을 통해 연결했다고 가정했습니다. 왜 다르게해야할까요? – Damascus

+0

나중에 다른 사람들이 다른 프로젝트에서 사용하는 일반적인 솔루션이어야합니다. 값은 바인딩없이 사용자 입력이 아닌 코드 숨김으로부터 설정할 수 있습니다. 어떻게 든 응용 프로그램이 사용자 입력 모드에 있는지 알아야합니다. Dispatcher는 입력이라고하는 우선 순위를가집니다. 응용 프로그램 스레드가 입력 모드에 있다면 어떻게 든 디스패처에게 요청할 수 있습니다. 나는 그 일을하는 법을 모른다. –

0

반주 필드 속성을 사용 등록하는 것 당신의 뷰 모델에서. ViewModel 내부에서 사용하는 두 번째 setter - SetProp() 메소드를 도입하십시오. 이렇게하면 통화의 출처에 따라 다른 동작을 추가 할 수 있습니다.

```

private bool mMyProp; 
    public bool MyProp 
    { 
     get { return mMyProp; } 
     set 
     { 
      if (mMyProp != value) 
      { 
       mMyProp = value; 
       // Todo: add here code specific for calls coming from the UI 
       RaisePropertyChanged(() => MyProp); 
      } 
     } 
    } 

    public void SetPropFromViewModel(bool value) 
    { 
     if (mMyProp != value) 
     { 
      mMyProp = value; 
      // Todo: add here code specific for calls coming from ViewModel 
      RaisePropertyChanged(() => MyProp); 
     } 
    } 
+0

무슨 뜻인지 확실하지 않습니다? –

+0

사용자 상호 작용은 어디에 있습니까 ??? –

+0

사용자 상호 작용은 XAML 파일에 정의 된 바인딩을 통해 MyProp 속성의 setter에서 직접 발생합니다. – jeromerg

관련 문제