커맨드 동작으로 사용자 정의 컨트롤을 만드는 중이며 이상한 점이있었습니다. 내가 찾은 일부 기사는 CanExecuteChangedHandler EventHandler를 정적으로 선언하고 다른 항목은 정적이 아닌 것으로 선언했습니다. Microsoft의 SDK 설명서는 정적이지만 정적으로 선언하면 여러 컨트롤을 사용할 때 이상한 동작을 보입니다.WPF 컨트롤에서 EventHandler를 정적 또는 비 정적으로 선언하십시오.
private static EventHandler canExecuteChangedHandler;
private void AddSecureCommand(ISecureCommand secureCommand)
{
canExecuteChangedHandler = new EventHandler(CanExecuteChanged);
securityTypeChangedHandler = new EventHandler(SecurityTypeChanged);
if (secureCommand != null)
{
secureCommand.CanExecuteChanged += canExecuteChangedHandler;
secureCommand.SecurityTypeChanged += securityTypeChangedHandler;
}
}
누군가 적절한 방법을 알고 있습니까? 정적 EventHandler가 작동하지 않게하는 잘못된 작업을하고 있습니까?
가비지 수집 이유를 이해하고 있으며 클래스 수준에서 선언 된 EventHandler가 있어야한다는 것을 알고 있습니다. 내가 가지고있는 문제는 정적 인 경우 클래스를 여러 번 인스턴스화 할 때 이상한 행동을 보일 때입니다. – Brady
줄 바꿈을 추가하고 주석을 달았습니다. 나는 위의 코멘트를 편집하려고했지만 분명히 나는 단지 그것을 업데이트하기 위해 5 분을 얻는다. 위에서 정교하게 ... 내가 가지고있는 문제는 클래스 (또는 컨트롤)를 여러 번 인스턴스화 할 때 정적 일 때 이상한 행동을 보일 때입니다. 좀 더 연구를 한 후에 EventHandler 대리자의 타겟이 인스턴스에 특정하다는 것을 알 수 있습니다. 내 경우에는 정적 EventHandler를 사용하여 문제가 발생합니다. 정적 EventHandler를 사용할 수있는 경우가있을 수 있지만 내 경우에는 작동하지 않을 것입니다. – Brady
요점을 요약하면 : 이벤트 핸들러 참조는 정적 인 경우에만 정적 일 수 있습니다. 명령 이벤트에 추가 한 후에도 수정하지 않도록 조심해야합니다.나는 대답을 업데이트 할 것이다. –