2012-06-07 3 views
0

그래서 기본적으로 "Category"라는 사용자 지정 개체를 추가하고 DisplayMember를 내 개체의 "Name"속성으로 설정하여 채운 폼에 ComboBox가 있습니다.ComboBox에서 Object 이벤트를 어떻게 잡을 수 있습니까?

동시에 열 수있는 다른 양식에서 논제 "카테고리"개체의 이름을 편집 할 수 있습니다. 나는 "NameChanged"라는 이벤트를 발생 시키지만 ComboBox가 들어있는 형태로 어떻게 잡을 수 있습니까?

개체 "범주"의 속성 "이름"이 변경되는 경우에도 ComboBox의 표시가 자동 업데이트되지 않습니다. 그래서 나는 이벤트를 잡아야하지만, 어떻게해야할지 모른다.

나를 도울 수있는 사람 덕분에.

답변

0

클래스 클래스를 INotifyPropertyChanged를 구현하면 속성이 변경 될 때 이벤트를 처리 할 수 ​​있습니다.

그래서, 간단한 속성에서 사용자의 속성을 변경해야합니까하려면 다음과 같이 더 많은 뭔가를

// will NOT raise event 
public string Name { get; set; } 

:뿐만 아니라 클래스에

// will raise event 
public string Name 
{ 
    get { return _Name; } 
    set 
    { 
     if (_Name != value) 
     { 
      _Name = value; 
      OnPropertyChanged("Name"); 
     } 
    } 
} 
private string _Name; 

을 다음이에서 INotifyPropertyChanged를 구현 :

public event EventHandler<PropertyChangedEventArgs> PropertyChanged; 

    protected virtual void OnPropertyChanged(PropertyChangedEventArgs e) 
    { 
     if (PropertyChanged != null) 
      PropertyChanged(this, e); 
    } 
    protected virtual void OnPropertyChanged(string propertyName) 
    { 
     OnPropertyChanged(new PropertyChangedEventArgs(propertyName)); 
    } 

이제 카테고리 상자를 ComboBox에 추가 할 때 Pro에 가입하십시오. pertyChanged 이벤트는 Name 속성이 변경 될 때마다 발생합니다.

더 나은 방법

당신의 콤보 상자를 채울 Binding 클래스를 사용하는 것이 좋습니다. 바인딩은 속성 값이 변경 될 때 자동으로 INotifyPropertyChanged를 사용하여 표시를 업데이트합니다.

+0

답장을 보내 주셔서 감사합니다. 나는 지금 데이터 바인딩으로 나의 콤보 박스를 다시 코딩하려하고있다. – user1428252

+0

나는 그것을 할 수 없다. ComboBox.DataBindings.Add 메서드를 사용해야합니까? 그렇다면, 그것을 사용하는 방법 사촌 나는 여러 가지 방법을 시도하고 그것을 작동하게 만들 수 없습니다. 내 데이터 소스는 List of (Category의) 상속을받는 클래스입니다. – user1428252

+0

데이터 바인딩에 대한 경험이있는 대부분의 사람들은 WPF와 Silverlight를 사용하고 있습니다. WinForms와 바인딩으로 시작하는 좋은 장소는 다음과 같습니다 : http://stackoverflow.com/questions/29654/winforms-databinding-and-foreign-key-relationships and http://stackoverflow.com/questions/454959/winforms-databinding –

관련 문제