2014-06-10 4 views
0

세 개의 단추가 포함 된 사용자 지정 컨트롤을 만들고 있습니다. 모든 버튼은 탭을 나타냅니다. 버튼을 클릭하여 해당 탭에 해당하는 탭으로 변경하면 해당 컨트롤의 변수가 uppded되며이 변수의 이름은 "selectedIndex"입니다. 이 색인이 변경 될 때 트리거하는 맞춤 이벤트를 만들려면 어떻게해야합니까?사용자 지정 컨트롤의 사용자 지정 이벤트 (변수 변경시)

여기 맞춤 이벤트에 대한 솔루션을 보았지만 모두 클릭 이벤트와 같은 기존 이벤트의 사본입니다. 변수의 변화 "에 대한 이벤트를 가진 involvs 내 문제.

감사합니다!

+2

해당 변수가 개체의 속성입니까? 객체는 표준 인터페이스로'INotifyPropertyChanged'를 구현하고 속성의 설정자에서'PropertyChanged' 이벤트를 호출 할 수 있습니다. – David

+0

Wery 좋은 아이디어, 내 변수를 속성으로 만드는 방법을 살펴 보겠습니다. 감사! – Dave

+0

그래서 IndexChanged에 대한 속성을 추가했습니다 : 'public int SelectedIndex { get; 개인 집합; // set {selectedIndex = value; } }' 이제이 속성에 대해서만 ** INotifyPropertyChanged **를 추가하여 값이 변경 될 때 이벤트를 트리거하도록합니까? – Dave

답변

1

하나의 옵션은 개체가 INotifyPropertyChanged interface 매우 표준을 구현하는 것입니다. 객체의 모든 속성이 PropertyChanged를 인상해야한다는 주장에는 규칙이 없다 이벤트는, 그래서 그냥 문제의 하나 개의 속성을 올릴 뭔가를 같이 :.

public class MyObject : INotifyPropertyChanged 
{ 
    private string _myProperty; 
    public string MyProperty 
    { 
     get { return _myProperty; } 
     set 
     { 
      _myProperty = value; 
      NotifyPropertyChanged(); 
     } 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 

    private void NotifyPropertyChanged([CallerMemberName] string propertyName = "") 
    { 
     if (PropertyChanged != null) 
      PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
    } 
} 

당신의 .NET 버전이 CallerMemberName를 지원하지 않는 경우에 당신은 그것을 제거 할 수 있습니다 수동으로 속성 이름을 제공 :

NotifyPropertyChanged("MyProperty"); 

이 시점에서 모든 호출 코드는이 개체의 모든 인스턴스에서 공용 PropertyChanged 이벤트를 구독 할 수 있습니다. 이 인터페이스는 데이터 바인딩 된 UI 요소를 업데이트하기 위해 많은 UI 기술에서 일반적으로 사용되기 때문에 특히 편리합니다. 모든 인터페이스 적용은 실제로 이벤트의 표준 이름입니다. 원하는 경우 인터페이스를 사용하지 않고 사용자 정의 공용 이벤트를 만들 수 있습니다. 그리고 당신의 객체가 논리적으로 필요할 때마다 그 이벤트를 호출하십시오. 이벤트를 노출하고 호출하는 구조는 동일합니다.

+0

고마워요, MR! 나는 당신의 첫 번째 코멘트를 해답으로 삼고 싶습니다. 제 질문에 대한 좋은 답변입니다. 그러나 나는 단지 의견 일 뿐이므로 다른 답변을 답으로 표시 할 수는 없기 때문에! 멋진 하루 되세요! – Dave

관련 문제