2010-08-23 13 views
2

사용자 정의 컨트롤을 개발 중이며 라우팅 된 이벤트를 사용하려고합니다. RoutedEventHandler와 RoutedPropertyChangedEventHandler라는 두 대표가 제공됩니다. 첫 번째는 정보를 전달하지 않으며 두 번째는 속성 변경의 이전 값과 새로운 값을 사용합니다. 그러나 단일 정보를 전달해야하므로 Action 대리자와 동일한 정보를 원합니다. 제공된 것이 있습니까? 액션 대리인을 사용할 수 있습니까?WPF에서 전달 된 이벤트 - 작업 대리자 사용

답변

5

추가 데이터를 보유 할 RoutedEventArgs의 하위 클래스를 만들고 EventHandler<T>을 args 클래스와 함께 사용하십시오. 이것은 RoutedEventHandler로 변환 될 수 있으며 추가 데이터는 핸들러에서 사용할 수 있습니다.

모든 유형의 단일 매개 변수를 보유하는 일반 RoutedEventArgs 클래스를 만들 수 있지만 일반적으로 새 클래스를 만들면 코드를 읽기 쉽고 수정하여 나중에 더 많은 매개 변수를 포함 할 수 있습니다.

public class FooEventArgs 
    : RoutedEventArgs 
{ 
    // Declare additional data to pass here 
    public string Data { get; set; } 
} 

public class FooControl 
    : UserControl 
{ 
    public static readonly RoutedEvent FooEvent = 
     EventManager.RegisterRoutedEvent("Foo", RoutingStrategy.Bubble, 
      typeof(EventHandler<FooEventArgs>), typeof(FooControl)); 

    public event EventHandler<FooEventArgs> Foo 
    { 
     add { AddHandler(FooEvent, value); } 
     remove { RemoveHandler(FooEvent, value); } 
    } 

    protected void OnFoo() 
    { 
     base.RaiseEvent(new FooEventArgs() 
     { 
      RoutedEvent = FooEvent, 
      // Supply the data here 
      Data = "data", 
     }); 
    } 
} 
+0

대단히 감사합니다. 매우 유용합니다! – devdigital

관련 문제