2009-03-10 3 views
5

데이터 바인딩 된 양식이있는 경우 사용자가 텍스트 상자에 텍스트를 입력하거나 콤보 상자에서 항목을 선택하여 수정했는지 어떻게 알 수 있습니까? 내 TextBox의 "TextChanged"이벤트에 연결하려고했지만 문제점은 내 양식이 데이터 바인딩에 참여할 때 "TextChanged"이벤트가 발생하여 내 양식을 "더티 (dirty)"라고 표시하는 것입니다.양식/필드가 데이터 바인딩 된 경우 어떻게 "더티"로 표시 할 수 있습니까?

답변

3

시도

public partial class Window1 : INotifyPropertyChanged 

다음

public event PropertyChangedEventHandler PropertyChanged; 

public string UserName 
{ 
    get { return _UserName; } 
    set { if (value != _UserName) 
    { 
     _UserName = value; 
     OnNotifyPropertyChanged("UserName"); 
    }} 
} 

private void OnNotifyPropertyChanged(string property) 
{ 
    if (PropertyChanged != null) 
    PropertyChanged(this, new PropertyChangedEventArgs(property)); 
} 

와 데이터 바인딩과 같은

<TextBox Text="{Binding UserName}"/> 
+0

매우 작은 개선 : 대신 중첩을 줄일 수 있습니다. if (value == _UserName) return; 시각적 인 혼란을 조금 줄입니다. –

0

페이지를 처음 표시 할 때 TextChanged 이벤트가 발생하면 배열에 양식 값을 저장하고 다른 양식이 더러운 경우 기존 값과 비교하십시오.

1

모델 클래스가 INotifyPropertyChanged을 구현합니까? 그렇다면 클래스의 PropertyChanged 이벤트에 대한 처리기를 추가하고 문제의 속성이 변경되는지 관찰 할 수 있습니다.

INotifyPropertyChanged을 구현하지 않은 경우 UI 레이어에 업데이트를 알리는 데 사용하는 메커니즘을 여기에서 사용할 수도 있습니다.

0

구현 ->http://www.mishainthecloud.com/2009/07/simple-dirty-tracking-for-winforms-in-c.html합니다.

나는 이것이 조금 늦다는 것을 알고 있지만 나는이 접근법을 좋아한다. 캡슐화 된 선량.

컨트롤을 바인딩 한 후 SetAsClean()을 호출하십시오. 이 메소드 호출은 BindingSources의 이벤트 중 일부를 처리하여 동일한 더티 추적 클래스에 캡슐화 될 수 있습니다.

+0

이것이 WPF에 적용되지 않는다고 생각하십시오. –

관련 문제