2017-10-12 8 views
-1

GridView의 코드 뒤에서 스타일을 설정하려면 ListView입니다. 그게 ListView.View 종속성 속성이므로 변경된 시간을 모니터링하고 싶습니다. 종속성 속성을 추가하려고ListView.View 변경 사항에 대한 모니터

this answer에서 콜백을 변경 :

Error CS1503 Argument 2: cannot convert from 'System.Windows.DependencyPropertyChangedEventHandler' to 'System.EventHandler'

여전히 컴파일러를 유지 (EventHandler)handler 캐스팅하려고 : 핸들러는

void Handler(object sender, DependencyPropertyChangedEventArgs e) { ... } 

컴파일러 오류가 발생합니다

var handler = new DependencyPropertyChangedEventHandler(Handler); 
DependencyPropertyDescriptor.FromProperty(ListView.ViewProperty, 
    typeof(ListView)).AddValueChanged(listView, handler); 

입니다

경우 불평 :

Error CS0030 Cannot convert type 'System.Windows.DependencyPropertyChangedEventHandler' to 'System.EventHandler'


나는 표준 이벤트 핸들러를 사용하려고하면 :

void Handler(object sender, EventArgs e) { ... } 

그것을 컴파일 가능한하게

var handler = new EventHandler(Handler); 

을하지만, 그것은

로 실행시 충돌합니다

An unhandled exception of type 'System.ArgumentException' occurred in PresentationFramework.dll

Additional information: Handler type is not valid.

AddValueChanged 종속성 속성 콜백을 사용하여 다른 작업을 시도하려면 어떻게해야합니까? 아마도 그 접근법은 틀렸을 것입니다. 왜 그럴까요? ListView.View이 변경되면 어떻게 알릴 수 있습니까?

this answer의 솔루션을 적용하고 싶지 않습니다. 바인딩을 사용할 수 없으며 (xaml에 값이 설정 됨) MyListView 만 만들고 싶지는 않습니다.

답변

1

이 나를 위해 작동합니다 확인하는

public MainWindow() 
{ 
    InitializeComponent(); 

    DependencyPropertyDescriptor 
     .FromProperty(ListView.ViewProperty, typeof(ListView)) 
     .AddValueChanged(listView, ViewChanged); 

    listView.View = new GridView(); 
} 

private void ViewChanged(object sender, EventArgs e) 
{ 
    Debug.WriteLine("ViewChanged"); 
} 
+0

감사합니다, 그건 정말 도움이되었다. 오류는 실제로 다른 이벤트 처리기 (내 질문이 가난한)에서 온다,하지만 제목 + 대답은 내가 추측하는 다른 사람에게 유용 할 수 있습니다. – Sinatr